2016-07-13 29 views
2

我想结合两个正则表达式功能来清理我的数据帧。假设我有以下数据框。结合两个正则表达式 - 拉姆达功能于一体的

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 

有没有办法在一个步骤中完成所有的替换?

回答

3

可以在正则表达式使用或(|)和一次性一举两得的操作,这样

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

所以,在你的情况下,lambda函数将

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

有没有办法在一个步骤中将相同的函数应用于数据框中的多个列(列不一定相邻)?显然,这不起作用:'data [[col1,col2]]。apply(lambda x:re.sub('\ + | - 。*','',x))''。 – sedeh

+0

@sedeh对不起!我对熊猫没有太多的想法。也许你可能会想这是一个单独的问题。 – thefourtheye