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

如何通过列列表一次性将字典映射应用于Pandas DataFrame指定列?

如何在单次调用中为Pandas DataFrame的指定列列表应用字典映射?

你想要给DataFrame的指定列(比如示例中的col1和col2)统一应用同一个字典映射,同时不影响其他列,还希望简化语法,避免重复写列名或多次调用replace。

示例数据与映射字典

先看你的基础数据和映射规则:

import pandas as pd

data = {'id': ['a', 'b', 'c', 'd', 'e'],
        'col1': ['PHX', 'BKN', 'X', 'PHX', 'X'],
        'col2': ['X', 'PHX', 'BKN', 'BKN', 'X'],
        'col3': ['PHX', 'BKN', 'PHX', 'BKN', 'PHX']
       }
df = pd.DataFrame(data)

name_dict = {'PHX' : 'PHO', 'BKN': 'NJN'}

问题分析

  • 直接用df.replace(name_dict)会替换所有列,不符合需求;
  • 链式调用df.replace({'col1': name_dict}).replace({'col2': name_dict})或多键字典df.replace({'col1': name_dict, 'col2': name_dict})虽然可行,但列多的时候重复写列名很麻烦;
  • 尝试df.replace({['col1', 'col2']: name_dict})报错,是因为字典的键必须是可哈希类型,而列表是不可哈希的,所以触发TypeError: unhashable type: 'list'。

两种简化方案

方案1:字典推导式生成映射规则

用字典推导式自动生成列名到映射字典的对应关系,不用重复写name_dict:

cols_to_map = ['col1', 'col2']
df = df.replace({col: name_dict for col in cols_to_map})

方案2:直接选中目标列并赋值

更直观的方式是先选中要处理的列,应用映射后直接赋值回原DataFrame:

cols_to_map = ['col1', 'col2']
df[cols_to_map] = df[cols_to_map].replace(name_dict)

验证结果

两种方法都能得到你想要的输出:

id col1 col2 col3
0  a  PHO    X  PHX
1  b  NJN  PHO  BKN
2  c    X  NJN  PHX
3  d  PHO  NJN  BKN
4  e    X    X  PHX

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:22:41