格式化pandas列的内容。删除尾随文本和数字

时间:2017-02-19 19:12:43

标签: python regex pandas

我已经使用BeautifulSoup和pandas创建了一个包含错误代码和相应错误消息的列的csv。

格式化之前,列看起来像这样

-132456ErrorMessage
-3254Some other Error 
-45466You've now used 3 different examples. 2 more to go. 
-10240 This time there was a space.    
-1232113That was a long number.

我已经成功地隔离了这样的代码文本:

dfDSError['text']  = dfDSError['text'].map(lambda x: x.lstrip('-0123456789'))

这就是我想要的。

但我一直在努力想出一个代码解决方案。

我试过了:

dfDSError['codes'] = dfDSError['codes'].replace(regex=True,to_replace= r'\D',value=r'')

但是,这会将错误消息中的数字附加到代码编号的末尾。所以对于上面的第三个例子而不是45466我会得到4546632.另外我想保留前导减号。

我想也许我可以以某种方式将rstrip()与正则表达式结合起来找到空格旁边有一个非数字或空格并删除其他所有内容,但我没有成功。

for_removal = re.compile(r'\d\D*')
dfDSError['codes']  = dfDSError['codes'].map(lambda x: x.rstrip(re.findall(for_removal,x)))                         
TypeError: rstrip arg must be None, unicode or str

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用extract

dfDSError[['code','text']] = dfDSError.text.str.extract('([-0-9]+)(.*)', expand=True)
print (dfDSError)
                                                text      code
0                                       ErrorMessage   -132456
1                                  Some other Error      -3254
2  You've now used 3 different examples. 2 more t...    -45466
3                   This time there was a space.        -10240
4                            That was a long number.  -1232113