
本文介绍多种高效方法,批量移除dataframe中28+列名末尾的“| 编号”部分,仅保留前缀名称,避免手动重命名的低效操作。
本文介绍多种高效方法,批量移除dataframe中28+列名末尾的“| 编号”部分,仅保留前缀名称,避免手动重命名的低效操作。
在实际数据分析中,常遇到列名格式不规范的问题——例如列名形如 "Miscellaneous group | 00002928"、"Alcoholic Beverages | 0000292",其中竖线 | 后为无意义编号。面对28列甚至更多列,逐一手动 .rename() 显然不可取。幸运的是,Pandas 提供了强大的字符串向量化操作,可一行代码统一处理全部列名。
✅ 推荐方案:str.split()(最直观可靠)
df.columns = df.columns.str.split(r'\s+\|', regex=True).str[0]
该语句将每列名按正则 \s+\|(一个或多个空白字符 + |)分割,并取分割后的首段(即名称部分)。regex=True 是关键参数(Pandas ≥ 1.4 默认启用,但显式声明更稳妥)。此方法逻辑清晰、容错性强,即使某些列名不含 |,.str[0] 也会原样保留,不会报错。
✅ 替代方案:str.replace()(简洁高效)
df.columns = df.columns.str.replace(r'\s+\|.*$', '', regex=True)
使用正则匹配“空白 + | + 任意后续字符至行尾”,并替换为空字符串。效率略高,且语义明确——直接删除 | 及之后所有内容。注意 $ 确保匹配到行尾,避免误删中间字符。
⚠️ 其他可行方式(按需选用)
-
map+re.sub(适合复杂逻辑扩展):import re df.columns = list(map(lambda x: re.sub(r'\s+\|.*$', '', x), df.columns))
注意:
map返回迭代器,需转为list或直接赋值给df.columns(Pandas 会自动适配)。 -
rename(columns=lambda...)(函数式风格):df = df.rename(columns=lambda x: x.split(' |', 1)[0]) # 使用 maxsplit=1 更安全若确保格式严格为
"xxx | yyy",用str.split(' |', 1)比正则更快;但若空格数量不固定(如"xxx | yyy"),建议仍用正则。
? 验证与注意事项
执行后建议快速验证效果:
print(df.columns.tolist()) # 输出示例:['Miscellaneous group', 'Alcoholic Beverages', 'Animal fats group']
⚠️ 重要提醒:
- 所有方法均原地修改列名,无需
inplace=True; - 若存在重复列名(如多个列都叫
"Miscellaneous group"),Pandas 不会报错,但后续操作可能出错,请用df.columns.is_unique检查; - 正则表达式
r'\s+\|'中的\s+能兼容空格、制表符等,比硬写' |'更鲁棒; - 在 Google Colab 或 Jupyter 中,推荐首选
str.split()或str.replace()—— 代码简短、可读性高、执行稳定。
掌握这些向量化列名处理技巧,你就能在3秒内完成28列的标准化,把时间留给真正的分析任务。










