Python:遍历DataFrame存入字典遇不可哈希错误,如何解决?
解决TypeError: unhashable type: 'DataFrame'错误
错误原因
- 字典的键必须是可哈希类型(比如字符串、数字、元组这类不可变对象),而Pandas DataFrame是可变对象,属于不可哈希类型,直接用它当字典键会触发报错。
- 你的代码里,
for name in dataframes循环的name是DataFrame对象本身,不是变量名,执行cost_dict[name] = ...时自然会抛出错误。
修正方案
方法一:对应遍历名称列表和DataFrame列表
# 定义与DataFrame顺序匹配的名称列表 df_names = ['df_1', 'df_oslo_2', 'df_3', 'df_4', 'df_5'] dataframes = [df_1, df_oslo_2, df_3, df_4, df_5] cost_dict = {} # 同时遍历名称和对应的DataFrame for name, df in zip(df_names, dataframes): list_cost = df.loc[5:128, ['A','B', 'C']].values.tolist() list_cost_tuple = tuple(tuple(sub) for sub in list_cost) cost_dict[name] = list_cost_tuple
方法二:用字典映射名称与DataFrame
# 直接创建名称到DataFrame的映射 df_map = { 'df_1': df_1, 'df_oslo_2': df_oslo_2, 'df_3': df_3, 'df_4': df_4, 'df_5': df_5 } cost_dict = {} for name, df in df_map.items(): list_cost = df.loc[5:128, ['A','B', 'C']].values.tolist() list_cost_tuple = tuple(tuple(sub) for sub in list_cost) cost_dict[name] = list_cost_tuple
总结
问题出在你把DataFrame对象当作字典的键,只要换成字符串、数字这类可哈希的标识作为键,就能正常将处理后的结果存入字典。
内容的提问来源于stack exchange,提问作者abh
相关产品推荐
相关产品推荐

