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

Pandas如何基于给定非Python字典批量替换数据框列值

分类列批量映射转换实现方案

第一步:将映射表转为Python字典

先把你手里的非字典格式映射表整理为两列结构化数据(如Excel、CSV格式,一列存原文本取值,一列存对应目标数值),再用pandas读取后转成字典:

import pandas as pd
# 读取映射表,替换为你自己的文件路径和对应列名
mapping_df = pd.read_excel("映射表文件路径.xlsx")
industry_map = dict(zip(mapping_df['原文本列名'], mapping_df['目标数值列名']))

第二步:单列转换实现

用pandas内置的map方法即可完成单列的映射转换,不需要手动写if判断:

# 示例为转换PTOCCUPATIONALINDUSTRY列,新增编码列(也可以直接覆盖原列)
df['PTOCCUPATIONALINDUSTRY_编码'] = df['PTOCCUPATIONALINDUSTRY'].map(industry_map)

第三步:30列批量处理方案

提前把所有需要转换的列和对应的映射字典整理为一个总映射字典,遍历即可批量完成转换:

# 总映射字典结构:键为需要转换的列名,值为该列对应的映射字典
column_total_mapping = {
    "PTOCCUPATIONALINDUSTRY": industry_map,
    "你要转换的第2个列名": 第2个列对应的映射字典,
    "你要转换的第3个列名": 第3个列对应的映射字典,
    # 依次补充剩余27个列的配置即可
}

# 批量转换
for col, col_map in column_total_mapping.items():
    # 生成新的编码列,要覆盖原列就把f"{col}_编码"改成col
    df[f"{col}_编码"] = df[col].map(col_map)
    # 如果需要处理不在映射表中的值,避免生成NaN,可以加fillna,比如:
    # df[f"{col}_编码"] = df[col].map(col_map).fillna(-1) # -1为自定义的默认值

注意事项

  • 如果原列中存在映射表未收录的取值,map方法会返回NaN,可根据业务需要用fillna设置默认值
  • 确保映射表中原文本取值和待转换列的取值完全一致,避免大小写、空格差异导致映射失败

内容的提问来源于stack exchange,提问作者Sean Roudnitsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:36:02