

**やりたいこと**
次のようなデータフレームのtitleのColumnからyearを抽出して別にyearのColumnを設けたい。[![画像の説明をここに入力](https://i.stack.imgur.com/OvMva.jpg)](https://i.stack.imgur.com/OvMva.jpg)
**問題点** だが、以下のようなコードを試してみると警告が表示され、yearのColumnの値が全てNaNになってしまう。

[code]

    def rm_dates_from_title(df: pd.DataFrame):
      df['year'] = df.title.str.extract('(\(\d\d\d\d\))', expand=False)
    
      df['year'] = df.year.str.extract('(\d\d\d\d)', expand=False)
    
      df['title'] = df.loc.title.str.replace('(\(\d\d\d\d\))', '', regex=True)
    
      rm_dates_from_title(recommended_movies)
    recommended_movies.head(20)
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/DkEw2.jpg)](https://i.stack.imgur.com/DkEw2.jpg)


CC BY-SA 4.0
2023-01-06T07:26:20.917
93212
2023-01-06T11:20:00.467
56418
question
python dataframe
DataframeのColumnのうちの一つがNaNになってしまう


手元の環境は Pandas 1.5.2 ですが、以下の様に記述すると問題の
`warning`(`SettingWithCopyWarning`)は表示されません(もっとも、質問に掲示されているコードでも表示されませんけれども)。
コメントにも書きましたが、`title` に括弧で囲まれた4桁の数字(映画の公開年)が含まれていない場合は `NaN` になります。

[code]

    import pandas as pd
    import io
    
    csv_data = '''
    movieid,title,genres
    50,"Usual Suspects, The",Crime|Mystery|Thriller
    110,Braveheart,Action|Drama|War
    260,Star Wars: Episode IV - New Hope(1977),Action|Adventure|Sci-Fi
    '''
    df = pd.read_csv(io.StringIO(csv_data))
    
    #
    rx = r'\((\d{4})\)'
    df['year'] = df['title'].str.extract(rx, expand=False)
    df['title'] = df['title'].str.replace(rx, '', regex=True)
    
    print(df)
    
[/code]

movieid | title | genres | year  
---|---|---|---  
50 | Usual Suspects, The | Crime|Mystery|Thriller | nan  
110 | Braveheart | Action|Drama|War | nan  
260 | Star Wars: Episode IV - New Hope | Action|Adventure|Sci-Fi | 1977


CC BY-SA 4.0
2023-01-06T08:26:49.957
93215
2023-01-06T11:20:00.467
2023-01-06T11:20:00.467
47127
47127
93212
answer