我在数据框中有一个列,我想通过删除括号来清理它。
1 Auburn (Auburn University)[1]
2 Florence (University of North Alabama)
3 Jacksonville (Jacksonville State University)[2]
4 Livingston (University of West Alabama)[2]
5 Montevallo (University of Montevallo)[2]
6 Troy (Troy University)[2]
7 Tuscaloosa (University of Alabama, Stillman Co...
8 Tuskegee (Tuskegee University)[5]
10 Fairbanks (University of Alaska Fairbanks)[2]
12 Flagstaff (Northern Arizona University)[6]
我使用unitowns['City'].str.replace('\(.*\)','').str.replace('\[.*\]','')
获得预期结果,如下所示 -
1 Auburn
2 Florence
3 Jacksonville
4 Livingston
5 Montevallo
6 Troy
7 Tuscaloosa
8 Tuskegee
10 Fairbanks
12 Flagstaff
有没有办法合并这些表达方式?此代码似乎不起作用 - > unitowns['City'].str.replace('(\(.*\)) | (\[.*\])','')
答案 0 :(得分:2)
选项1
str.extract
/ str.findall
而不是删除不相关的内容,为什么不提取相关的内容呢?
df.City.str.extract(r'(.*?)(?=\()', expand=False)
或者,
df.City.str.findall(r'(.*?)(?=\()').str[0]
0 Auburn
1 Florence
2 Jacksonville
3 Livingston
4 Montevallo
5 Troy
6 Tuscaloosa
7 Tuskegee
8 Fairbanks
9 Flagstaff
Name: City, dtype: object
您可能还希望在提取后删除前导/尾随空格。您可以在结果上调用str.strip
-
df.City = df.City.str.extract(r'(.*?)(?=\()', expand=False).str.strip()
或者,
df.City = df.City.str.findall(r'(.*?)(?=\()').str[0].str.strip()
正则表达式详细信息
( # capture group
.*? # non-greedy matcher
)
(?= # lookahead
\( # opening parenthesis
)
选项2
str.split
如果您的城市名称只包含一个单词,str.split
也可以使用。
df.City.str.split('\s', 1).str[0]
0 Auburn
1 Florence
2 Jacksonville
3 Livingston
4 Montevallo
5 Troy
6 Tuscaloosa
7 Tuskegee
8 Fairbanks
9 Flagstaff
Name: City, dtype: object
选项3
str.replace
缩小您的链式呼叫,您可以使用 -
df['City'].str.replace(r'\(.*?\)|\[.*?\]', '').str.strip()
0 Auburn
1 Florence
2 Jacksonville
3 Livingston
4 Montevallo
5 Troy
6 Tuscaloosa
7 Tuskegee
8 Fairbanks
9 Flagstaff
Name: City, dtype: object