查找并替换数据帧中的半公共字符串?

时间:2019-04-08 15:30:35

标签: python regex python-3.x pandas

我试图找到一个半常见的字符串并删除列中的所有其他数据。熊猫和稀土已经进口。例如,我有数据框...

>>>df
COLUMN COUNT   DATA
           1   this row RA-123: data 8b43a
           2   here RA-5372: data 94h63c

我只需要保留RA“后面的数字”并删除之前和之后的所有内容。后面的数字长度并不总是相同,并且'RA-'字符串并非总是在相同位置出现。每个实例后都有一个冒号,可以用作定界符。

我尝试过这个(一个朋友为我写了正则表达式搜索,因为我不熟悉它)。

df.assign(DATA= df['DATA'].str.extract(re.search('RA[^:]+')))

但是python返回了

TypeError: search() missing 1 required positional argument: 'string'

我在这里想念什么?预先感谢!

3 个答案:

答案 0 :(得分:3)

您应将捕获组与摘录一起使用:

df['DATA'].str.extract(r'(RA-\d+)')

在这里,(RA-\d+)是一个与RA匹配的捕获组,然后是一个连字符和一个或多个数字。

您可以使用自己的模式,但是仍然需要用捕获括号r'(RA[^:]+)'来包装它。

答案 1 :(得分:1)

看着docs,您不需要re.search方法。您只需拨打df[DATA] = df['DATA'].str.extract(r'RA[^:]+'))

答案 2 :(得分:0)

正如我之前提到的,这里不需要re

其他答案很好地说明了如何直接使用extract。但是,要具体回答您的问题,如果您真的想使用re,则可以使用re.compile而不是re.search

df.assign(DATA= df['DATA'].str.extract(re.compile(regex_str)))