You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中无法遍历DataFrame对象?遇「不可哈希」错误求助

解决DataFrame作为字典键引发的TypeError问题

错误原因

Python字典的键必须是可哈希对象,而DataFrame是可变对象(可随时修改内部数据),其哈希值会随内容变化而改变,因此不能作为字典的键,直接触发报错:TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed.

修正方案

方案1:用列表存储(DataFrame, 表名)元组(推荐)

直接把需要导出的DataFrame和对应表名放在列表的元组中,遍历解构获取值,避开字典键的限制:

import functools

# 定义待导出的DataFrame与对应表名集合
tables_to_export = [
    (df1, 'tableName1'),
    (df2, 'tableName2'),
    (df3, 'tableName3')
]

for df, table_name in tables_to_export:
    try:
        df.to_sql(
            table_name,
            engine,
            index=False,
            method=functools.partial(pd_writer, quote_identifiers=False),
            if_exists='append'
        )
    except ProgrammingError:
        pass

方案2:用可哈希键映射DataFrame与表名

若坚持使用字典,将键替换为字符串、数字这类可哈希类型,对应值存储(DataFrame, 表名)元组:

import functools

df_map = {
    'data1': (df1, 'tableName1'),
    'data2': (df2, 'tableName2'),
    'data3': (df3, 'tableName3')
}

for df, table_name in df_map.values():
    try:
        df.to_sql(
            table_name,
            engine,
            index=False,
            method=functools.partial(pd_writer, quote_identifiers=False),
            if_exists='append'
        )
    except ProgrammingError:
        pass

内容的提问来源于stack exchange,提问作者BossRoyce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:20:52