如何在新版Pandas中替换DataFrame值?旧代码失效修复
修复方案
问题分析
- 大小写不匹配:原数据中Type列的
R_NEW与替换字典里的R_New大小写不一致,正则默认区分大小写,导致无法匹配替换。 - 全局替换误修改其他列:原代码未指定替换列,会对所有列应用规则,加上
value=None的设置,导致Status列的WAIT被错误替换为NaN(新版Pandas中replace的参数逻辑有变化)。 - 参数用法不符合新版规范:新版Pandas中,使用正则替换字典时,更推荐将字典传递给
regex参数,而非to_replace。
修复后的代码
import pandas as pd df = pd.DataFrame([ {"Type":"R_NEW","Status":"CHANGE","Email":"gra.com"}, {"Type":"R_Change","Status":"WAIT","Email":"rog.com"}, {"Type":"Preorder","Status":"WAIT","Email":"dgrse.com"} ]) # 只针对Type列,用正则字典替换,修正大小写匹配 df["Type"] = df["Type"].replace( regex={ r"^R_NEW$": "NEW", r"^R_Change$": "Change", r"^R_DELETE$": "Delete", r"^Preorder$": "Preorder" } ) print(df)
代码说明
- 指定替换列:只对Type列操作,避免影响Status、Email等其他列。
- 修正正则匹配:用
^和$确保完全匹配(避免部分匹配的意外情况),同时修正键的大小写与数据一致。 - 符合新版Pandas规范:将正则替换字典直接传给
regex参数,逻辑更清晰,适配新版行为。
输出结果
Type Status Email 0 NEW CHANGE gra.com 1 Change WAIT rog.com 2 Preorder WAIT dgrse.com
内容的提问来源于stack exchange,提问作者madhavi
相关产品推荐
相关产品推荐

