pandas.DataFrame.replace 用通配符
Posted
技术标签:
【中文标题】pandas.DataFrame.replace 用通配符【英文标题】:pandas.DataFrame.replace with wildcards 【发布时间】:2016-12-04 09:20:04 【问题描述】:pandas.DataFrame.replace
正则表达式是否替换支持通配符和“捕获组”?
例如,将([A-Z])(\w+)
替换为\2\1
?
支持什么样的正则表达式? Perl 的正则表达式是否支持?例如,可以将([A-Z])(\w+)
替换为\l\1\2
(\l
:将下一个字符更改为小写。)
更新:
正如史蒂夫指出的那样,根据Python documentation,它应该可以工作,但以下内容并没有达到我的预期:
df = pd.DataFrame('A': np.random.choice(['foo', 'bar'], 100),
'B': np.random.choice(['one', 'two', 'three'], 100),
'C': np.random.choice(['I1', 'I2', 'I3', 'I4'], 100),
'D': np.random.randint(-10,11,100),
'E': np.random.randn(100))
df.replace("f(.)(.)","b\1\2", regex=True,inplace=True)
怎么了?
谢谢
【问题讨论】:
您需要在您的正则表达式模式中使用原始字符串!反斜杠正在转义字符串中的 1 和 2 个字符!这应该有效:df.replace(r"f(.)(.)",r"b\1\2", regex=True, inplace=True)
注意第一个参数的原始字符串是多余的,但你应该养成使用正则表达式的习惯
【参考方案1】:
根据pandas documentation:
正则表达式替换是在 re.sub 的底层执行的。 re.sub 的替换规则是一样的。
所以,是的,任何可以用 Python 的re.sub
执行的替换(例如\1
)也可以用pandas.DataFrame.replace
执行。请参阅Python documentation 了解更多信息。
【讨论】:
以上是关于pandas.DataFrame.replace 用通配符的主要内容,如果未能解决你的问题,请参考以下文章