如何通过自定义函数用字典值替换DataFrame指定列内容
Pandas多列自定义替换函数修复方案
需求明确:借助replace_dict中的映射关系,替换DataFrame里lang和state列的对应值(例如English→ENG、Alabama→AL),但现有自定义replace函数仅能处理state列,无法同时处理lang列,需修正逻辑让函数能基于传入的colname参数完成对应列的替换。
错误原因分析
你之前尝试的replace函数存在两个核心问题:
- 循环遍历
replace_dict的键值对时,将循环变量命名为colname,直接覆盖了传入的列名参数,等于白白传入了目标列信息 - 循环内执行一次替换后立刻
return,导致只会处理replace_dict里的第一个列(也就是state),完全没机会处理lang列
修正后的完整代码
让函数利用传入的colname参数,从replace_dict中取出对应列的映射规则,针对性完成替换即可:
import pandas as pd d=[['English','Alabama','bob','smith']] df=pd.DataFrame(d,columns=["lang",'state','first','last']) filename='temp' error_dict={} error_dict[filename]={} replace_dict={"state":{"Alabama": "AL", "Alaska": "AK"},"lang":{"English":"ENG", "French":"FR"}} def replace(df, error_dict, colname): # 根据传入的列名获取对应替换规则,执行替换 if colname in replace_dict: df[colname] = df[colname].replace(replace_dict[colname]) return df, error_dict parsing_map={ "lang": [replace], "state":[replace] } for i in parsing_map.keys(): for j in parsing_map[i]: df, error_dict = j(df, error_dict, i) # 查看最终结果 print(df)
运行结果
执行后得到的DataFrame与预期一致:
lang state first last 0 ENG AL bob smith
内容的提问来源于stack exchange,提问作者git hubber
相关产品推荐
相关产品推荐

