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
相关产品推荐
相关产品推荐

