【问题标题】: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

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

【问题讨论】:

    标签: regex string python-3.x pandas series


    【解决方案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)。

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 2018-06-23
      • 2020-05-25
      • 2020-04-08
      • 1970-01-01
      • 2019-10-19
      相关资源
      最近更新 更多