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

DataFrame列表列求差异报错:TypeError: unhashable type: 'list'原因咨询

问题分析与解决

错误原因

你遇到的TypeError: unhashable type: 'list'有两个核心问题:

  • 哈希性限制:列表是可变类型,不支持哈希运算。当你写y not in x['B']时,Python会尝试将列表y作为哈希键去匹配x['B'](Pandas Series)的元素或索引,直接触发哈希错误。
  • 逻辑偏差:你的列表推导式是遍历整个A列的所有列表,判断每个列表是否不在整个B列中,这完全不是你想要的逐行计算对应列表差异的逻辑。

正确实现方式

要逐行计算A列和B列对应列表的差异(提取A中有但B中没有的元素),可以用以下两种方法:

方法1:保留元素顺序的逐行遍历

用apply指定axis=1逐行处理,确保元素顺序和原列表一致:

df['X1'] = df.apply(lambda row: [item for item in row['A'] if item not in row['B']], axis=1)

方法2:基于集合的快速计算(会丢失元素顺序)

如果不关心元素顺序,用集合的差集运算效率更高:

df['X1'] = [list(set(a) - set(b)) for a, b in zip(df['A'], df['B'])]

运行结果

执行上述代码后,DataFrame会新增X1列,结果如下:

NAME          A          B    X1
0      JOHN  [1, 2, 3]  [2, 3, 4]  [1]
1      MARY  [2, 3, 4]  [3, 4, 5]  [2]
2  CHARLIE  [3, 4, 5]  [4, 5, 6]  [3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:13:11