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

pandas DataFrame.map()使用字典映射报list不可哈希错误如何解决

问题原因
  • 第一个报错TypeError: unhashable type: 'list':pandas的map方法结合字典做映射时,要求参与查找的键必须是可哈希类型(字符串、数字、元组等),列表是可变不可哈希类型,不能用于哈希查找。你遇到该报错,说明SNP_A列中存在部分值为列表类型,不是统一的字符串,映射时尝试将列表作为键去字典中查找触发了类型错误。
  • 第二个报错TypeError: 'type' object is not subscriptable:你转换字典为元组时误用了方括号语法(如tuple[csnps_indices]),类型转换需要用圆括号调用(如tuple(csnps_indices)),但该操作本身无法解决映射问题,不需要尝试这个方向。
解决步骤
  1. 先清洗SNP_A列,确保所有值都是字符串类型:
# 可根据你的实际数据调整逻辑:如果是列表就取第一个元素,其他情况统一转字符串
ld_r2_array_df['SNP_A'] = ld_r2_array_df['SNP_A'].apply(lambda x: x[0] if isinstance(x, list) else str(x))
  1. 执行映射操作,同时处理不在字典中的键,避免返回NaN:
# 不存在的键默认返回空列表,你可以根据需求修改默认值
ld_r2_array_df["order"] = ld_r2_array_df.SNP_A.map(lambda x: csnps_indices.get(x, []))
验证方案

运行以下代码可以确认SNP_A列的类型分布,判断是否存在列表类型的值:

print(ld_r2_array_df['SNP_A'].apply(type).value_counts())

如果输出结果中包含<class 'list'>,说明确实是列值类型异常导致的问题,按上述清洗方法处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:00