You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:05:25