pandas df.replace替换列值报错TypeError: Unhashable type:'list'
错误原因
pandas.Series.replace() 接收字典作为映射参数时,要求字典的键必须是可哈希的标量值。你写的代码里把列表(可变类型,不可哈希)作为字典键,直接触发了TypeError: unhashable type: 'list'报错,这种写法不符合pandas replace方法的参数规则,无法实现「多个原始值映射到同一个目标值」的需求。
可行修复方案
- 方案1:展开映射键值对(最易读)
把每个需要匹配的原始值单独作为字典键,指向同一个替换目标即可,不需要用列表包裹:ort_raw['Location'] = ort_raw['Location'].replace({ '1': 'remote', 1: 'remote', '0': 'in_lab', 0: 'in_lab' }) - 方案2:统一列类型后映射(代码更简洁,避免后续类型问题)
你的列里同时混杂了字符串格式、整数格式的0/1,可以先把整列转为同类型再做替换,减少冗余的键值对:# 先将整列统一转为整数,再执行映射 ort_raw['Location'] = ort_raw['Location'].astype(int).replace({ 1: 'remote', 0: 'in_lab' })提示:如果列内存在无法转为整数的异常值,先完成异常值清洗再执行类型转换,避免触发新的报错。
- 方案3:多列替换兼容写法
如果后续需要同时对多列做替换规则配置,可以用列名作为一级键的嵌套字典写法,扩展性更强:ort_raw = ort_raw.replace({ 'Location': { '1': 'remote', 1: 'remote', '0': 'in_lab', 0: 'in_lab' } # 其他列的替换规则可以继续往下追加 })
内容的提问来源于stack exchange,提问作者providence.kps
相关产品推荐
相关产品推荐

