如何修改Python代码,用正则移除Pandas列名的括号及内部内容?
嘿,这问题我熟!你的代码有两个小问题导致没生效,我帮你修正一下:
问题出在哪?
str.replace()默认不支持正则:你写的正则表达式会被当作普通字符串去匹配,而Pandas的str.replace()需要显式指定regex=True才会启用正则模式。- 正则表达式写错了:你写的
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
相关产品推荐
相关产品推荐

