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

spl*_*ter 3 regex string series python-3.x pandas

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

ser = pd.Series(['asd3', 'qwe3', 'asd4', 'zxc'])
Run Code Online (Sandbox Code Playgroud)

我想打开'asd3''asd4'进入'asd'.也就是说,只需删除末尾的任何整数.我正在使用代码:

ser.str.replace('asd([0-9])','')
Run Code Online (Sandbox Code Playgroud)

Bote,我正在使用([0-9])符号,我解释说:对于该系列的任何元素,如果它看起来像'asd([0-9])',然后[0-9]用``(即删除它)替换.但我得到的是

0    
1  qwe3
2    
3  zxc
Run Code Online (Sandbox Code Playgroud)

而我想得到的是:

0  asd
1  qwe3
2  asd
3  zxc
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子,我的正则表达式字符串比这更丑陋,但我希望这表达了我打算做的事情.

Wik*_*żew 5

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

使用

ser.str.replace('asd[0-9]+','asd')
Run Code Online (Sandbox Code Playgroud)

要么

ser.str.replace('(asd)[0-9]+',r'\1')
Run Code Online (Sandbox Code Playgroud)

.replace('asd[0-9]+','asd')将取代asd和之后的任何数字1+用asd,而在.replace('(asd)[0-9]+',r'\1')中,asd子串会被捕获到组1(由于捕获括号内)和1+数字将被匹配,整个匹配将与被替换\1保持占位符第1组的价值(即asd).