如何在 Pandas DataFrame 中高效复制并重命名列

冬枫小哥_6473

冬枫小哥_6473

2026-11-13

129人浏览

原创

如何在 Pandas DataFrame 中高效复制并重命名列

本文介绍一种简洁、向量化的方式,利用 set_axis() 和列选择组合,一次性完成列的复制、重命名与保留原始列(如 values)的操作,避免显式循环,提升代码可读性与执行效率。

本文介绍一种简洁、向量化的方式,利用 `set_axis()` 和列选择组合,一次性完成列的复制、重命名与保留原始列(如 `values`)的操作,避免显式循环,提升代码可读性与执行效率。

在数据处理中,常需基于原始 DataFrame 构建多个结构化子表(例如适配不同数据库表结构),此时不仅需要重命名列,还需复制源列值到新列名下——尤其当同一源列被映射到多个目标列(如 B → dt_start 和 B → dt_end)时,简单的 rename() 无法满足需求,而手动循环又违背 pandas 的向量化设计哲学。

推荐解法是:先按需选取源列(支持重复列名),再统一重命名列轴。核心步骤如下:

  1. 提取源列名列表:从映射字典(如 mapping_dict['table_1'])的 values() 获取需复制的原始列(如 ['A', 'B', 'B']);
  2. 拼接保留列:将额外需保留的列(如 ['values'])追加至该列表;
  3. 列选择 + 重命名:用 df[...] 选取对应列(自动复制值),再通过 .set_axis(..., axis=1) 批量赋予新列名。
import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3], 
    'B': ['2025-10-01', '2025-10-02', '2025-10-01'], 
    'C': ['2025-02-10', '2025-02-15', '2025-02-20'], 
    'D': [0, 5, 4],
    'values': [52.3, 60.0, 70.6]
})

mapping_dict = {
    'table_1': {'id': 'A', 'dt_start': 'B', 'dt_end': 'B'},
    'table_2': {'id': 'D', 'dt_start': 'C', 'dt_end': 'C'}
}

# ✅ 一行生成 table_1
table_1 = df[
    list(mapping_dict['table_1'].values()) + ['values']
].set_axis(
    list(mapping_dict['table_1'].keys()) + ['values'], 
    axis=1
)
print(table_1)

输出:

   id    dt_start      dt_end  values
0   1  2025-10-01  2025-10-01    52.3
1   2  2025-10-02  2025-10-02    60.0
2   3  2025-10-01  2025-10-01    70.6

⚠️ 注意事项:

  • df[[col1, col2, col2]] 会真实复制列数据(非视图),因此 col2 出现两次即生成两个独立副本;
  • set_axis() 是纯列名重命名操作,不改变数据顺序或内容,安全高效;
  • 若需复用,建议封装为函数(见下方),增强可维护性。
def create_mapped_table(
    df: pd.DataFrame, 
    mapping: dict, 
    keep_cols: list = None
) -> pd.DataFrame:
    """
    根据列映射关系生成新 DataFrame

    Parameters:
    -----------
    df : 原始 DataFrame
    mapping : {新列名: 原列名} 的字典,支持原列名重复
    keep_cols : 需额外保留的列名列表(默认为空)

    Returns:
    --------
    新 DataFrame,列名为 mapping.keys() + keep_cols
    """
    keep_cols = keep_cols or []
    source_cols = list(mapping.values()) + keep_cols
    new_columns = list(mapping.keys()) + keep_cols
    return df[source_cols].set_axis(new_columns, axis=1)

# 复用示例
table_1 = create_mapped_table(df, mapping_dict['table_1'], ['values'])
table_2 = create_mapped_table(df, mapping_dict['table_2'], ['values'])

该方法完全避免了 for 循环和 drop() 操作,兼具性能、可读性与扩展性,是处理多目标列映射场景的推荐实践。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

2025.12.04

360

15

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

2026.01.31

292

21

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

2026.04.13

931

25

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

2026.11.12

0

15

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

2026.11.12

0

15

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

2026.11.12

0

15

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

120

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

80

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

80

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.3万人学习