web-dev-qa-db-ja.com

正規表現を使用して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
_

更新:映画のタイトルだけを正規表現で抽出したいと思います。したがって、次の正規表現を使用してみましょう:\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
_

pandasデータフレーム内のテキストから特定の機能を抽出する方法のアイデア。より具体的には、完全に新しいデータフレーム内の映画のタイトルだけを抽出するにはどうすればよいですか。たとえば、出力は次のようになります。

_Out[114]:

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

あなたが試すことができます - str.extract および strip ですが、 str.split 。映画の名前には数字も使用できるためです。次の解決策は、 replaceregexstrip で始まる括弧の内容です。

#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
17
jezrael

特定の部分をキャプチャするには、以下のような()でテキストグループを割り当てる必要があります。

new_df['just_movie_titles'] = df['movie_title'].str.extract('(.+?) \(')
new_df['just_movie_titles']

pandas.core.strings.StringMethods.extract

StringMethods.extract(pat、flags = 0、** kwargs)

渡された正規表現を使用して各文字列内のグループを検索

6
su79eu7k