如何使用选择性正则表达式在熊猫系列中执行替换?
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
)。
【讨论】:
以上是关于如何使用选择性正则表达式在熊猫系列中执行替换?的主要内容,如果未能解决你的问题,请参考以下文章