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
中提取。
如果该行包含"(",删除&#34之后的任何内容;(",然后删除空格。
如果该行不包含"(",请将其保留并复制到该区域。
我知道我可以用str.extract
函数处理它。但我在撰写正确的正则表达式模式时遇到了麻烦
df['Region'] =df['text'].str.extract(r'(.+)\(.*')
此正则表达式模式无法提取第一个字符串 我也承认使用split functon可以解决这个问题
str.split('(')[0]
但我不知道如何将结果放入专栏中。 希望收到涵盖这两种方法的答案。
答案 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