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

解决Pandas DataFrame批量重命名列名的TypeError问题

解决Pandas重命名列时的TypeError: unhashable type: 'list'问题

首先咱们得先搞明白你为啥踩了这个坑:你在df.rename()的columns参数里,用列表当作字典的键了,但字典的键必须是可哈希的类型(比如字符串、整数这种不可变的类型),列表是可变的,没法被哈希,所以直接触发了这个报错。

你的需求是把原来的GeneID_region_0到GeneID_region_42这些列名,替换成用layernames里的内容生成的新名称对吧?那核心是要把旧列名和新列名一一配对,做成一个键值对都是单个字符串的字典,而不是用列表当键或值。

正确的实现步骤

  1. 先提取需要替换的旧列名列表
  2. 用layernames生成对应的新列名列表
  3. 把两个列表配对成符合要求的字典,传给df.rename()

具体代码实现

# 生成需要替换的旧GeneID列名列表
old_geneid_cols = [f'GeneID_region_{i}' for i in range(43)]
# 用layernames生成新的GeneID列名列表
new_geneid_cols = [f'GeneID_region_{name}' for name in layernames]
# 把新旧列名一一配对成字典
rename_mapping = dict(zip(old_geneid_cols, new_geneid_cols))
# 执行重命名
df.rename(columns=rename_mapping, inplace=True)

额外补充:如果需要同时替换GeneValue列

如果你还想把GeneValue_region_*系列的列名也一起替换,用同样的逻辑扩展就行:

# 生成旧GeneValue列名列表
old_genevalue_cols = [f'GeneValue_region_{i}' for i in range(43)]
# 生成新GeneValue列名列表
new_genevalue_cols = [f'GeneValue_region_{name}' for name in layernames]
# 把这部分映射合并到之前的字典里
rename_mapping.update(dict(zip(old_genevalue_cols, new_genevalue_cols)))
# 执行批量重命名
df.rename(columns=rename_mapping, inplace=True)

这样就能一次性把所有目标列的名称都替换到位啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:17:37