我的知识记录

Python Excel批量修改列名

用pandas批量重命名Excel列名,支持字典映射、批量去空格、统一大小写、替换特殊字符,一次清洗所有表头。

场景痛点

从系统导出的表,列名乱七八糟:有空格、有括号、中英混合、大小写不统一。后续写公式、写代码全靠猜列名。用Python批量把表头统一成规范格式,后面用起来省心。

用到的库

pip install pandas openpyxl

完整代码

import pandas as pd

def rename_columns(input_file, output_file):
df = pd.read_excel(input_file)
print("原始列名:", list(df.columns))

# 1. 字典映射:旧名 -> 新名
rename_map = {
"客户名称 ": "客户名称",
"Tel": "电话",
"amt(元)": "金额",
" 下单日期 ": "下单日期"
}
df = df.rename(columns=rename_map)

# 2. 批量处理:去掉所有列名首尾空格
df.columns = df.columns.str.strip()

# 3. 批量替换特殊字符:把括号、斜杠换成下划线
df.columns = (df.columns
.str.replace("(", "", regex=False)
.str.replace(")", "", regex=False)
.str.replace("/", "_", regex=False)
.str.replace(" ", "_", regex=False))

# 4. 统一英文小写(如果有英文列)
# df.columns = df.columns.str.lower()

print("新列名:", list(df.columns))
df.to_excel(output_file, index=False)
print(f"已保存: {output_file}")

def batch_rename_files(input_dir):
"""批量给目录下所有Excel统一列名规范"""
import os
for f in os.listdir(input_dir):
if f.endswith(".xlsx") and not f.startswith("~"):
path = os.path.join(input_dir, f)
try:
rename_columns(path, path)
print(f"完成: {f}")
except Exception as e:
print(f"失败: {f}, {e}")

if __name__ == "__main__":
rename_columns("./客户表.xlsx", "./客户表_规范列名.xlsx")

代码讲解

  • df.rename(columns=rename_map) 用字典精确改指定列名,没在字典里的列保持不变。
  • df.columns.str.strip() 批量去掉所有列名首尾空格,这是最常见的脏列名来源。
  • 链式 str.replace(..., regex=False) 把特殊字符替换掉,regex=False 关闭正则避免转义麻烦。
  • 批量版遍历目录对每个文件处理,注意这里示例是直接覆盖原文件,生产环境建议先输出到新目录。

运行结果

打印新旧列名对比,生成新Excel,所有列名按规则统一,后续代码和公式直接用新列名。

注意事项

  • 改完列名后,下游引用旧列名的脚本/公式要同步改,建议改名前先 print(list(df.columns)) 留个底。
  • 中文列名不要硬塞英文缩写,团队协作时保持语义清晰。
  • 直接覆盖原文件有风险,先输出到 _规范.xlsx 后缀对比确认后再替换。

Python Excel批量修改列名

标签:

更新时间:2026-09-15 09:14:04

上一篇:Python Excel批量替换单元格内容:find-and-replace自动化

下一篇:Python Excel 批量添加超链接方法 openpyxl 实战