从Dataframe中提取字符串

时间:2017-03-01 04:29:44

标签: python regex pandas

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]

但我不知道如何将结果放入专栏中。 希望收到涵盖这两种方法的答案。

1 个答案:

答案 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