Pandas DataFrame字典映射替换仅单列生效的问题及解决
Pandas多列值替换失败问题排查与解决
问题原因
你的代码存在两个核心问题,导致仅state列替换成功:
replace函数中,return df被放在了for循环内部。循环第一次迭代处理完state列后就直接返回函数,完全没有机会处理lang列。- 函数接收的
colname参数被循环里的同名变量覆盖,完全没起到作用。不管调用时传入的是state还是lang,函数都会优先处理replace_dict里的第一个键(即state),随后直接返回。
解决方法
方法1:修复原函数逻辑
调整replace函数,让它仅处理传入的指定列,同时将return移到函数末尾:
import pandas as pd d=[['Alabama','English','test@gmail.com']] df=pd.DataFrame(d,columns=['state','lang','Email']) replace_dict={ "state": {"Alabama": "AL", "Alaska": "AK"}, "lang": {"English":"ENG", "French":"FR"} } # 修复后的replace函数:仅处理传入的目标列 def replace(df, colname): df[colname] = df[colname].replace(replace_dict[colname]) return df parsing_map={ "state":[replace], "lang": [replace] } for i in parsing_map.keys(): for j in parsing_map[i]: df = j(df,i) print(df)
方法2:简化写法(更推荐)
直接使用Pandas原生的replace方法,一次性完成多列替换,无需额外函数和映射表,代码更简洁高效:
import pandas as pd d=[['Alabama','English','test@gmail.com']] df=pd.DataFrame(d,columns=['state','lang','Email']) replace_dict={ "state": {"Alabama": "AL", "Alaska": "AK"}, "lang": {"English":"ENG", "French":"FR"} } # 直接传入字典完成多列批量替换 df = df.replace(replace_dict) print(df)
两种方法均可得到期望输出:
state lang Email 0 AL ENG test@gmail.com
内容的提问来源于stack exchange,提问作者git hubber
相关产品推荐
相关产品推荐

