微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用正则表达式提取pandas数据框中的特定内容?

如何解决如何使用正则表达式提取pandas数据框中的特定内容?

您可以尝试str.extractstrip,但最好使用str.split,因为电影名称中也可以是数字。下一个解决方案是replace括号的内容regex以及strip 前导空格和尾随空格:

#convert column to string
df['movie_title'] = df['movie_title'].astype(str)

#but it remove numbers in names of movies too
df['titles'] = df['movie_title'].str.extract('([a-zA-Z ]+)', expand=False).str.strip()
df['titles1'] = df['movie_title'].str.split('(', 1).str[0].str.strip()
df['titles2'] = df['movie_title'].str.replace(r'\([^)]*\)', '').str.strip()
print df
          movie_title      titles      titles1      titles2
0  Toy Story 2 (1995)   Toy Story  Toy Story 2  Toy Story 2
1    GoldenEye (1995)   GoldenEye    GoldenEye    GoldenEye
2   Four Rooms (1995)  Four Rooms   Four Rooms   Four Rooms
3   Get Shorty (1995)  Get Shorty   Get Shorty   Get Shorty
4      copycat (1995)     copycat      copycat      copycat

解决方法

考虑以下熊猫数据框:

In [114]:

df['movie_title'].head()

​
Out[114]:

0     Toy Story (1995)
1     GoldenEye (1995)
2    Four Rooms (1995)
3    Get Shorty (1995)
4       Copycat (1995)
...
Name: movie_title,dtype: object

更新: 我想用正则表达式提取电影的标题。因此,让我们使用以下正则表达式:\b([^\d\W]+)\b。所以我尝试了以下方法:

df_3['movie_title'] = df_3['movie_title'].str.extract('\b([^\d\W]+)\b')
df_3['movie_title']

但是,我得到以下信息:

0       NaN
1       NaN
2       NaN
3       NaN
4       NaN
5       NaN
6       NaN
7       NaN
8       NaN

关于如何从熊猫数据框中的文本中提取特定功能的任何想法?更具体地说,如何在全新的数据框中仅提取电影的标题?例如,所需的输出应为:

Out[114]:

0     Toy Story
1     GoldenEye
2    Four Rooms
3    Get Shorty
4       Copycat
...
Name: movie_title,dtype: object

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。