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

如何利用另一个DataFrame的映射值重命名目标DataFrame的列?

如何修改DataFrame列名并保留原有数据(基于映射关系DataFrame)

这个需求很常见,我来给你一步步拆解解决方法,先从构造示例数据开始,这样你能直接跟着代码跑通整个流程:

第一步:构造示例DataFrame

首先我们先把你描述的两个DataFrame用代码还原出来:

import pandas as pd

# 带原始数据的DataFrame,列名为name1、name2、name3
df_data = pd.DataFrame(
    [[123, 456, 678], [123, 456, 678]],  # 两行示例数据,你可以换成自己的真实数据
    columns=['name1', 'name2', 'name3']
)

# 存储列名映射关系的DataFrame,这里假设它有两列:原列名(original)和新列名(new)
df_mapping = pd.DataFrame(
    {'original': ['name2', 'name3', 'name1'],
     'new': ['abc', 'cdf', 'fgh']}
)

第二步:两种修改列名的方法

方法一:用rename函数(推荐,不修改原数据)

先把映射DataFrame转换成原列名→新列名的字典,再用rename函数替换列名。这种方法不会改动原始的df_data,适合需要保留原数据的场景:

# 将映射DataFrame转为字典格式
col_map = df_mapping.set_index('original')['new'].to_dict()

# 生成修改列名后的新DataFrame
df_renamed = df_data.rename(columns=col_map)

# 此时df_renamed的列名就是fgh、abc、cdf,和原数据的列顺序完全对应
print(df_renamed)

输出结果:

fgh  abc  cdf
0  123  456  678
1  123  456  678

方法二:直接赋值columns属性(更简洁,会修改原数据)

如果你不介意修改原始的df_data,可以直接构造目标列名列表并赋值给df_data.columns:

# 按照df_data原列名的顺序,从映射表中提取对应的新列名
new_col_names = df_mapping.set_index('original').loc[df_data.columns, 'new'].tolist()

# 直接修改原DataFrame的列名
df_data.columns = new_col_names

print(df_data)

输出结果和方法一完全一致。

注意点

  • 如果你的映射DataFrame列名不是original和new,记得把代码里的对应列名替换成你实际的列名;
  • 如果最终需要的列顺序和原DataFrame列顺序不同,修改完列名后可以用df_final = df_renamed[['fgh', 'abc', 'cdf']]手动指定列顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:07:33