You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python代码,用正则移除Pandas列名的括号及内部内容?

嘿,这问题我熟!你的代码有两个小问题导致没生效,我帮你修正一下:

问题出在哪?

  1. str.replace()默认不支持正则:你写的正则表达式会被当作普通字符串去匹配,而Pandas的str.replace()需要显式指定regex=True才会启用正则模式。
  2. 正则表达式写错了:你写的r'[\d+.*'既不完整(缺闭合的括号),也没正确匹配方括号及其内部内容——我们需要匹配从[到]的整个片段,包括括号本身。

正确的写法

这里给你两种可行的方案,选哪种都可以:

方案1:用Pandas原生的str.replace(推荐,无需额外依赖)

直接在replace里加上regex=True,并修正正则表达式:

df = df.rename(columns=lambda n: n.replace(r'\[.*?\]', '', regex=True))
  • \[:转义左方括号(因为它是正则特殊字符)
  • .*?:非贪婪匹配任意字符,确保只匹配到最近的右方括号
  • \]:转义右方括号

如果想连括号前面的空格一起去掉(比如把name1 [a]变成name1而不是name1 ),可以把正则改成:

df = df.rename(columns=lambda n: n.replace(r'\s*\[[^\]]*\]', '', regex=True))
  • \s*:匹配0个或多个空格
  • [^\]]*:匹配除了右括号之外的所有字符,比.*?更精准

方案2:用re.sub(需要导入re模块)

如果你习惯用Python的re库,也可以这样写:

import re
df = df.rename(columns=lambda n: re.sub(r'\[.*?\]', '', n))

逻辑和上面一样,用re.sub直接替换匹配到的正则内容。

测试效果

运行后你的列名会从:
Variable Names、name1 [a]、name2 [b]、name3 [c]
变成:
Variable Names、name1、name2、name3(用带空格处理的正则的话)

内容的提问来源于stack exchange,提问作者sonu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:21:01