为何Pandas中含感叹号的字符串正则替换未生效?
解决Pandas中提取感叹号后内容的问题
嘿,我明白你遇到的困扰啦——想把Series里带感叹号的字符串替换成感叹号后面的内容,但原代码没生效对吧?这是因为Pandas的Series.replace()默认是全字符串匹配模式,不会自动识别正则表达式,得手动开启正则模式才行!
方法一:修正原代码,启用正则模式
只需要给replace()方法加上regex=True参数,就能让它按照正则规则处理了:
import pandas as pd ser = pd.Series(['Aland Islands !Åland Islands', 'Reunion !Réunion', 'Zimbabwe']) patt = r'.*!(.*)' repl = lambda m: m.group(1) # 加上regex=True关键参数 result = ser.replace(patt, repl, regex=True) print(result)
运行后就能得到预期结果:
0 Åland Islands 1 Réunion 2 Zimbabwe dtype: object
方法二:用str.extract更直接提取
因为我们的需求本质是提取感叹号后的内容,用str.extract()会更简洁直观,还能直接处理无匹配的情况:
# 提取分组内容,无匹配的用原字符串填充 result = ser.str.extract(r'!(.*)', expand=False).fillna(ser) print(result)
这个方法的逻辑是:用正则!(.*)匹配感叹号及后面的内容,提取分组里的部分;对于没有感叹号的条目(比如Zimbabwe),extract会返回NaN,再用fillna(ser)把NaN替换成原字符串,效果和上面完全一致。
内容的提问来源于stack exchange,提问作者xnx
相关产品推荐
相关产品推荐

