tum*_*eed 9 python regex string python-2.7 pandas
考虑以下pandas数据帧:
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
Run Code Online (Sandbox Code Playgroud)
更新:
我想用正则表达式提取电影的标题.所以,让我们使用以下正则表达式:\b([^\d\W]+)\b.所以我尝试了以下方法:
df_3['movie_title'] = df_3['movie_title'].str.extract('\b([^\d\W]+)\b')
df_3['movie_title']
Run Code Online (Sandbox Code Playgroud)
但是,我得到以下内容:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
Run Code Online (Sandbox Code Playgroud)
有关如何从pandas数据框中的文本中提取特定功能的任何想法吗?更具体地说,如何在一个全新的数据框中提取电影的标题?例如,所需的输出应为:
Out[114]:
0 Toy Story
1 GoldenEye
2 Four Rooms
3 Get Shorty
4 Copycat
...
Name: movie_title, dtype: object
Run Code Online (Sandbox Code Playgroud)
jez*_*ael 17
你可以尝试str.extract和strip,但更好的是使用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
Run Code Online (Sandbox Code Playgroud)
您应该分配()以下类似的文本组来捕获它的特定部分.
new_df['just_movie_titles'] = df['movie_title'].str.extract('(.+?) \(')
new_df['just_movie_titles']
Run Code Online (Sandbox Code Playgroud)
pandas.core.strings.StringMethods.extract
StringMethods.extract(pat,flags = 0,**kwargs)
使用传递的正则表达式查找每个字符串中的组
| 归档时间: |
|
| 查看次数: |
33000 次 |
| 最近记录: |