2017-03-01 175 views
1
from pandas import DataFrame,Series 
import pandas as pd 
df 
text             region 
The Five College Region       The Five College Region 
South Hadley (Mount Holyoke College)    South Hadley 
Waltham (Bentley University), (Brandeis Univer..) Waltham 

该区域应从text中提取。 如果行中包含“(”,删除“(”后的任何内容,然后删除空格 如果该行不包含“(”,保留并复制到该区域 我知道我可以处理它与str.extract功能。但我在写权正则表达式来自Dataframe的提取字符串

df['Region'] =df['text'].str.extract(r'(.+)\(.*') 

这正则表达式不能提取第一串 我也承认,采用分体式functon适用于这个问题

str.split('(')[0] 

但我困扰不知道如何把结果放在一列中希望收到涵盖两种方法的答案。

回答

2

选项1
assign + str.split

df.text.str.split('\s*\(').str[0] 

0 The Five College Region 
1    South Hadley 
2     Waltham 
Name: text, dtype: object 

df.assign(region=df.text.str.split('\s*\(').str[0]) 

               text     region 
0       The Five College Region The Five College Region 
1    South Hadley (Mount Holyoke College)    South Hadley 
2 Waltham (Bentley University), (Brandeis Univer..)     Waltham 

选项2
join + str.extract

df.text.str.extract('(?P<region>[^\(]+)\s*\(*', expand=False) 

0 The Five College Region 
1    South Hadley 
2     Waltham 
Name: text, dtype: object 

df.join(df.text.str.extract('(?P<region>[^\(]+)\s*\(*', expand=False)) 

               text     region 
0       The Five College Region The Five College Region 
1    South Hadley (Mount Holyoke College)    South Hadley 
2 Waltham (Bentley University), (Brandeis Univer..)     Waltham 
+0

能否请您帮助解释正则表达式 “(ΔP [^ \(] +)\ s * \(*”?我很困惑。 –

+0

@DingruiZhang'?P '是约定来命名提取的组件。这转换成提取的“pd.Series”的名称。 '[^(] +'是一个或多个不是**的字符('。'\ s *(*'是零个或多个空格,后跟零个或多个'('。 – piRSquared