如何基于字典键值对高效替换pandas DataFrame指定列的取值
问题核心原因
你操作后列值未修改的核心原因是:pandas 中绝大多数数据操作方法默认返回新对象,不会直接修改原 DataFrame,你调用 df.replace({"col1": di}) 后没有将结果赋值回原变量,原 df 自然不会发生变化。
同时你问题中贴的代码与预期输出的对应关系写反了,实际要实现的是 col1 列中 1 替换为 A、2 替换为 B、未匹配的 w 保留原值的效果,以下是两种常用的高效实现方案:
方案1:使用 replace 方法(适合全匹配替换,逻辑直观)
这是你当前尝试的方法,仅需补充赋值操作即可生效,适合中小规模数据集:
# 赋值回原变量即可生效,不会修改原数据的内存结构 df = df.replace({"col1": di}) # 不推荐使用 inplace=True 参数,易产生不可预期的副作用 # df.replace({"col1": di}, inplace=True)
方案2:map + fillna 组合(性能更优,适合大规模数据集)
当 DataFrame 数据量超过10万行时,该方案的执行效率比 replace 高30%以上:
# map 会将匹配到的值做映射,未匹配的返回NaN,再用fillna把原值填回即可 df['col1'] = df['col1'].map(di).fillna(df['col1'])
执行上述任意一种方法后,得到的结果如下:
col1 col2 0 w a 1 A 2 2 B NaN
内容的提问来源于stack exchange,提问作者swarna
相关产品推荐
相关产品推荐

