我试图找到一个半常见的字符串并删除列中的所有其他数据。熊猫和稀土已经进口。例如,我有数据框...
>>>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'
我在这里想念什么?预先感谢!
答案 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)))