贝利信息

如何用列表一次性对 DataFrame 的指定列应用字典映射

日期:2026-01-01 00:00 / 作者:碧海醫心

本文介绍两种简洁高效的方法,使用列名列表批量对 pandas dataframe 的子集列(如 col1、col2)应用字典映射,避免重复书写键名或链式调用 replace,兼顾可读性与性能。

在 Pandas 中,当需要仅对部分列(而非整张表)应用字典映射(如将 'PHX' → 'PHO'、'BKN' → 'NJN')时,直接使用 df.replace(name_dict) 会作用于所有列,而显式写出 {'col1': name_dict, 'col2': name_dict} 又显得冗余。幸运的是,有更优雅的解决方案。

✅ 推荐方法一:dict.fromkeys() 构造映射字典

利用 Python 内置的 dict.fromkeys(keys, value),可快速生成以多列为键、同一映射字典为值的结构:

name_dict = {'PHX': 'PHO', 'BKN': 'NJN'}
cols_to_map = ['col1', 'col2']

df = df.replace(dict.fromkeys(cols_to_map, name_dict))

该写法等价于 {'col1': name_dict, 'col2': name_dict},但无需重复输入 name_dict,语义清晰且一行完成。

✅ 推荐方法二:按列切片 + 原地替换(推荐用于大表)

先通过列名列表选取子 DataFrame,再对其整体调用 replace(),并赋值回原位置:

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

此方式优势明显:

⚠️ 注意事项:

综上,dict.fromkeys() 适合简洁表达,而列切片赋值更适合生产环境中的可控性和可维护性。两者均显著优于手动重复键名或链式 replace()。