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 用通配符的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫中用 NaN 替换浮点值?