Pandas中使用Groupby或PivotTable时出现TypeError: unhashable type: 'list'的问题求助
解决pandas多变量分组时的TypeError: unhashable type: 'list'问题
我之前也碰到过一模一样的问题!你这个报错的核心原因其实是分组变量列表里混进了列表类型的元素,而不是纯字符串的列名——虽然你说这些都是df里的有效列,但大概率是某个变量的定义出了问题,比如把一个列名列表当成了单个列名放进了vars_agrup里。
下面是具体的排查和解决步骤:
1. 先检查分组变量的元素类型
先确认vars_agrup里的每个元素都是字符串,而不是列表。运行这段代码看看:
for var in vars_agrup: print(f"变量名:{var},类型:{type(var)}")
如果输出里出现了<class 'list'>,那就是问题根源——pandas要求分组列名必须是可哈希的类型(比如字符串),把列表当列名自然会报错“不可哈希的类型:list”。
2. 修正分组变量列表
如果发现list_vars其实是一个包含多个列名的列表(比如list_vars = ['col1', 'col2']),那你需要把它展开到vars_agrup里,而不是把整个列表作为一个元素。比如:
# 假设原来的list_vars是多列名的集合 list_vars = ['col_a', 'col_b'] vars_agrup = ['num_vars'] + list_vars + ['Modelo']
这样vars_agrup就变成了一个全是字符串的列表,每个元素对应df里的一列。
3. 验证修正后的代码
用修正后的vars_agrup重新运行你的分组代码:
用pivot_table的写法
import numpy as np import pandas as pd # 修正后的分组变量列表 vars_agrup = ['num_vars', 'col_a', 'col_b', 'Modelo'] metricas = ["MAE", "MAE_perc", "MSE", "R2"] g = pd.pivot_table(df, index=vars_agrup, aggfunc=np.sum, values=metricas)
用groupby的写法
df.groupby(vars_agrup, as_index=False).agg(Count=('MAE','sum'))
额外排查点
如果检查后发现vars_agrup里全是字符串,那再确认下df的列名是否和这些字符串完全匹配(注意大小写、空格、特殊字符这些细节)。不过这种情况通常会报“列不存在”的错误,而不是你遇到的“unhashable type: list”,所以优先级可以靠后。
内容的提问来源于stack exchange,提问作者Andrea NR
相关产品推荐
相关产品推荐

