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

How to use a selective regex to perform replace in a pandas series?

我想在申请时使用正则表达式 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

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

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

使用

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

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

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