将两个正则表达式 - lambda函数合并为一个

时间:2016-07-13 01:30:05

标签: python regex lambda

我想结合两个正则表达式函数来清理我的数据框。假设我有以下数据帧。

import pandas as pd
time = ["09:00", "10:00", "11:00", "12:00", "13:00", "33:00"]
result = ["+52", "+62", "+44 - 10a10", "+44", "+30 - $1200", "110"]
data = pd.DataFrame({'time' : time, 'result' : result})

data看起来像这样。

    result        time
0   +52           09:00
1   +62           10:00
2   +44 - 10a10   11:00
3   +44           12:00
4   +30 - $1200   13:00
5   110           33:00

首先,我想删除+标志。其次,我想删除-标志及其后的所有内容。我可以用两个函数来完成它。

import re
data['result'] = data['result'].map(lambda x: re.sub('\+', '', x))
data['result'] = data['result'].map(lambda x: re.sub('\-.*', '', x))

data现在看起来像这样。

    result  time
0   52      09:00
1   62      10:00
2   44      11:00
3   44      12:00
4   30      13:00
5   110     33:00

有没有办法一步完成所有替换?

1 个答案:

答案 0 :(得分:3)

您可以在RegEx中使用或(|)并一次性完成这两项操作,如下所示

>>> import re
>>> re.sub(r'\+|-.*', '', 'a+b+c-d+f-g')
'abc'

因此,在您的情况下,lambda函数将是

data['result'] = data['result'].map(lambda x: re.sub('\+|-.*', '', x))