Pandas如何提取列名中@符号后的字符串并重命名列
解决Pandas列名重命名:提取@符号后的内容
问题原因分析
你原来的代码之所以把列名替换成正则文本,核心有两个问题:
- 错误使用
str.replace:col.replace(col, '正则表达式')相当于把整个列名字符串直接替换成第二个参数的文本,完全没触发正则匹配逻辑。 - Python的
re模块不支持\K断言,你单独测试的正则在Python环境里本身无法生效。
两种可行解决方案
方案1:正则替换(re.sub)
通过正则匹配@及之前的所有内容,替换为空字符串,保留@之后的有效部分:
import pandas as pd import re df = pd.read_csv('path') df.rename(columns=lambda col: re.sub(r'^.*@\s*', '', col), inplace=True)
正则说明:^.*@\s*会匹配从列名开头到@的所有字符,以及@后面的任意空白字符,替换后就剩下@之后的目标内容。
方案2:字符串分割(更简洁)
如果列名里只有一个@,用split分割后取最后一部分,再去除前后空白更高效:
import pandas as pd df = pd.read_csv('path') df.rename(columns=lambda col: col.split('@')[-1].strip(), inplace=True)
col.split('@')把列名按@拆分为列表,[-1]直接取列表最后一个元素(即@之后的内容).strip()自动去除内容前后的空白字符,比如示例里@后面的空格
内容的提问来源于stack exchange,提问作者Dot Net Dev 19
相关产品推荐
相关产品推荐

