如何使用选择性正则表达式在熊猫系列中执行替换?

Posted

技术标签:

【中文标题】如何使用选择性正则表达式在熊猫系列中执行替换?【英文标题】:How to use a selective regex to perform replace in a pandas series? 【发布时间】:2018-07-23 05:06:30 【问题描述】:

我想在申请pandas.Series.str.replace 时使用正则表达式。我知道它需要正则表达式,但我的输出不符合预期。这是一个简单的例子。假设我有

ser = pd.Series(['asd3', 'qwe3', 'asd4', 'zxc'])

我想把'asd3''asd4' 变成'asd'。也就是说,只需删除最后的任何整数。我正在使用代码:

ser.str.replace('asd([0-9])','')

请注意我正在使用([0-9]) 表示法,我将其解释为:对于该系列的任何元素,如果它看起来像'asd([0-9])',则将[0-9] 替换为``(即删除它) )。但我得到的是

0    
1  qwe3
2    
3  zxc

而我想得到的是:

0  asd
1  qwe3
2  asd
3  zxc

这是一个简单的例子,我的正则表达式字符串比这更难看,但我希望这能传达我打算做什么的想法。

【问题讨论】:

【参考方案1】:

在您的情况下,.replace('asd([0-9])','') 只是删除 asd 及其后面的任何数字。

使用

ser.str.replace('asd[0-9]+','asd')

ser.str.replace('(asd)[0-9]+',r'\1')

.replace('asd[0-9]+','asd') 将用asd 替换asd 及其后面的任何1+ 位数字,在.replace('(asd)[0-9]+',r'\1') 中,asd 子字符串将被捕获到组 1(由于捕获括号)和 1 + 数字将被匹配,整个匹配将被替换为包含第 1 组值的 \1 占位符(即 asd)。

【讨论】:

以上是关于如何使用选择性正则表达式在熊猫系列中执行替换?的主要内容,如果未能解决你的问题,请参考以下文章

带有熊猫列的正则表达式

了解熊猫系列提取函数中的正则表达式

如何在不同情况下使用正则表达式修改熊猫中的字符串

通过正则表达式将熊猫列替换为自身的一个子集

熊猫使用正则表达式选择列并按值除

如何通过熊猫过滤满足正则表达式的行