前两天帮一个做运营的朋友整理数据,她丢过来一个压缩包,说是上个月五个渠道的投放数据,帮她合到一起看效果。我解压一看,五个Excel文件,表头长这样:
| 渠道来源 | 点击量 | 消费(元) | 转化数 | ROI |
|---|
| | | | |
| 渠道 | 点击 | 花费 | 转化 | 投入产出比 |
五个文件,五种写法。"点击量"、"点击"、"Click" 混着来,"消费"、"花费"、"Cost" 轮着变。
合到一起全是空列,因为 pandas 以为它们不是同一个东西。
解决思路很简单:给每个文件的列名整体翻译一遍。
核心代码(保存为 rename_columns.py):
import pandas as pd# 你的翻译字典:左边是原始列名,右边是标准列名rename_map = { "点击": "点击量", "点击数": "点击量", "Click": "点击量", "花费": "消费", "Cost": "消费", "消耗": "消费", "投入产出比": "ROI", "ROI值": "ROI",}for f in ["渠道A.xlsx", "渠道B.xlsx", "渠道C.xlsx"]: df = pd.read_excel(f) df.columns = [rename_map.get(c.strip(), c) for c in df.columns] df.to_excel(f"标准_{f}", index=False)
rename_map 就是你的字典,所有奇奇怪怪的列名在这里统一翻译成标准名。get(c.strip(), c) 的意思是:找到了就替换,找不到就原样保留。
怎么用:
第一步:装库
pip install pandas openpyxl
第二步:先看一眼你的列名
打开任意一个Excel,把第一行的列名全抄下来,记在纸上或者记事本里。这一步很关键,不然你不知道要翻译哪些。
第三步:填 rename_map
把你看到的所有奇葩列名都写进去,右边写你想要的标准名。比如你发现有的文件叫"点击量",有的叫"点击数",有的叫"Click",那就都翻译成"点击量"。
第四步:改文件名列表,运行
输出的文件名前面会加 标准_ 前缀,不会覆盖原文件。
你可能会问:
有20个文件,不想一个个写文件名怎么办?
from pathlib import Pathfiles = list(Path("你的文件夹").glob("*.xlsx"))
一行搞定,自动读取文件夹里所有xlsx。
表头不在第一行,在第三行甚至第五行?
加个 header 参数:
df = pd.read_excel(f, header=2) # 跳过前2行,第3行当表头
有些列名前后有空格,匹配不上?
代码里已经加了 .strip(),自动去掉前后空格。如果中间也有空格(比如"点 击 量"),在 rename_map 里也写上带空格的版本就行。
列名是英文想批量改成中文?
rename_map 直接写英文到中文的映射:
rename_map = {"Channel": "渠道", "Click": "点击量", "Cost": "消费"}
逻辑是一样的。
3行核心代码,以后再拿到乱七八糟的表头,不用手动一个个改了。说实话这事儿我以前干了半年才想起来写个脚本,亏大了。
我是鲁叶的Python,10年互联网古法程序员。Python/ML/DL/大模型都折腾过,坑也踩了不少,关注我,一起交流心得体会。
下期预告:Python装库总报错?一个命令解决99%的安装问题