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后缀对比确认后再替换。

更新时间:2026-09-15 09:14:04
上一篇:Python Excel批量替换单元格内容:find-and-replace自动化