Skip to content

如何在 Pandas 中重命名列

Updated on

在使用 Pandas 进行数据清洗或整理时,重命名列几乎是最常见的操作之一。清晰、描述性强的列名可以让你的 DataFrame 更易阅读,并显著提升后续分析的效率与质量。

在这篇 2025 年更新的教程中,你将学到 在 Pandas 中重命名列的所有主流方法,包含最佳实践、示例以及常见坑点。

想更快地探索和可视化你的 Pandas DataFrame,而不用手写图表?

PyGWalker 可以将任意 DataFrame 转换为类似 Tableau 的可视化探索界面。 项目地址: https://github.com/Kanaries/pygwalker (opens in a new tab)

PyGWalker for Data visualization (opens in a new tab)


📌 在 Pandas 中重命名列是什么意思?

重命名列指的是 修改 DataFrame 中一个或多个列标签(列名)
这在以下场景非常有用:

  • 列名含义不清晰或风格不一致
  • 列名包含空格、特殊字符或拼写错误
  • 需要标准化列名以便合并数据或建模
  • 为展示或可视化使用更友好的人类可读标签

Pandas 提供了多种便捷方式来重命名列 —— 不同方法适合不同需求。


🔧 在 Pandas 中重命名列的所有方法

下面是最常见、也最推荐的几种方式。


✅ 1. 使用 rename() 重命名单个列

这是最安全、最明确的方式。

import pandas as pd
 
df = pd.DataFrame({
    'Name': ['John', 'Alex', 'Peter'],
    'Age': [25, 24, 28],
    'Gender': ['Male', 'Male', 'Male']
})
 
df = df.rename(columns={'Age': 'Years'})
print(df)

输出:

    Name  Years Gender
0   John     25   Male
1   Alex     24   Male
2  Peter     28   Male

✅ 2. 使用 rename() 重命名多个列

只需传入更大的字典即可:

df = df.rename(columns={
    'Age': 'Years',
    'Gender': 'Sex'
})

这种方式可以避免意外改变列顺序,并且会保留原有索引。


✅ 3. 使用 df.columns = [...] 一次性重命名所有列

当你已经知道所有新列名时,这种方式很方便:

df.columns = ['ID', 'Years', 'Dept']

⚠️ 重要提示:
列表长度必须与 DataFrame 的列数完全一致。


✅ 4. 使用 set_axis()(函数式风格)重命名列

该方法会返回一个新的 DataFrame,除非指定 inplace=True

df = df.set_axis(['A', 'Years', 'B'], axis=1)

虽然比较灵活,但对于简单重命名来说并不常用。


✅ 5. 使用列表推导式动态重命名列

非常适合批量格式化列名:

df.columns = [col.replace('_', ' ').title() for col in df.columns]

用于自动化清理列名非常好用,例如:

  • 全部转换为小写
  • 去掉空格
  • 批量添加前缀或后缀

示例:

df.columns = [col.lower() for col in df.columns]
df.columns = [f"user_{col}" for col in df.columns]

✅ 6. 按索引重命名列

虽然不常见,但 Pandas 也支持按列索引重命名:

df = df.rename(columns={2: 'Dept'})

当列名未知、存在重复,或者是动态生成时,这种方式会比较有用。


🧠 重命名列的最佳实践

✔ 优先使用 rename(),语义更清晰

rename() 的意图非常明确,不容易产生意外行为。

✔ 避免修改 df.columns,除非你要重命名所有列

直接替换整个列表虽然速度快,但如果列数不匹配就会报错,也更难排查。

✔ 在数据流水线中优先使用“全小写 + 下划线”风格

df.columns = [c.lower().replace(' ', '_') for c in df.columns]

这种命名风格更适合自动化处理和长期维护。

✔ 避免使用 inplace=True

根据 Pandas 的官方建议,inplace=True 不会带来性能优势,反而会让代码不够简洁且难以链式调用。


⚡ 快速速查表(Cheatsheet)

df.rename(columns={'old': 'new'})
df.columns = ['A', 'B', 'C']
df = df.set_axis(['A', 'B', 'C'], axis=1)
df.columns = [col.lower() for col in df.columns]
df.rename(columns={2: 'new_name'})

🏁 总结

重命名列是为 DataFrame 做分析前准备时一个简单却关键的步骤。Pandas 提供了多种方式来完成这件事——从使用 rename() 的显式重命名,到通过列表推导进行批量格式化。

推荐的使用策略是:

  • 当你只想重命名部分列时,用 rename()
  • 当你要重命名所有列时,用 df.columns = [...]
  • 当需要动态批量转换列名时,用列表推导式
  • 只有在必要时,才使用按索引重命名列的方式

利用好这些工具,就能让你的数据保持干净、统一且更易于后续分析和维护。


🔗 相关教程


❓ 常见问题解答(FAQ)

1. 我该如何在 Pandas 中重命名某一列?

使用 rename()

df.rename(columns={'old': 'new'})

2. 如何按列索引来重命名列?

df.rename(columns={0: 'id'})

3. 如何一次性重命名所有列?

df.columns = ['A', 'B', 'C']