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

为何Pandas透视表无法运行?报错TypeError: unhashable type: 'list'

问题原因

报错TypeError: unhashable type: 'list'的核心原因是:你用str.findall()生成的Category列,每个值都是列表类型,而pandas的pivot_table要求columns参数必须是可哈希的数据类型(比如字符串、整数),列表是不可哈希的,因此无法作为分组列使用。

看你的数据,findall会返回所有匹配到的关键词组成的列表:

  • 第一行描述匹配到Transfer,Category值为['Transfer']
  • 第二行描述匹配到Ref,Category值为['Ref']
解决方法

需要把Category列的列表类型转换成字符串类型,根据你的匹配场景,有两种常用方案:

方案1:取第一个匹配的关键词(适用于多数情况)

用str.extract()代替findall(),它会直接返回第一个匹配到的字符串,避免生成列表:

import re
# 替换原Category赋值代码
dff['Category'] = dff['Description'].str.extract(r'(Ref|BCA|Fund|Transfer)', flags=re.IGNORECASE)

方案2:将列表转成字符串(适用于可能匹配多个关键词的场景)

如果存在一个描述匹配多个关键词的情况,可以用分隔符把列表元素拼接成字符串:

import re
# 替换原Category赋值代码
dff['Category'] = dff['Description'].str.findall('Ref|BCA|Fund|Transfer', flags=re.IGNORECASE).str.join(', ')
验证修改后的透视表代码

修改Category列后,再运行透视表代码即可正常执行:

pivotf = pd.pivot_table(dff, 
                        index=["Date"], 
                        columns="Category",
                        values=['Amount'],
                        margins=False, margins_name="Total")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:05:23