Python Split()函数使用及电影名年份拆分异常问题求助
解决电影标题与年份拆分的异常问题
嘿,我完全懂你的困扰——那些带额外括号的电影标题确实会把简单的split逻辑搞崩!别慌,咱们换个思路,用正则表达式精准定位最后那个年份括号,就能完美解决这个问题。
为什么之前的方法不行?
你之前用的str.split('(', 1, expand=True)是按第一个左括号拆分,但像City of Lost Children, The (Cité des enfants perdus, La) (1999)这种标题,第一个左括号是标题的一部分,拆分后第二列会包含多余的内容,不是我们要的年份。
解决方案:用str.extract配合正则表达式
正则表达式可以精准匹配最后一个括号里的四位年份,不管标题里有多少其他括号。具体代码如下:
# 拆分标题和年份 movies[['clean_title', 'release_year']] = movies['title'].str.extract(r'^(.*)\s\((\d{4})\)$', expand=True)
正则表达式解释:
^(.*):贪婪匹配从开头到最后一个空格+左括号之前的所有内容,这样就能保留标题里的所有括号和内容\s\(:匹配年份前的空格和左括号(确保是最后那个括号)(\d{4}):匹配四位数字的年份(电影上映年份基本都是四位)\)$:匹配年份后的右括号,确保是结尾的括号
测试异常案例
对于你提到的两个异常案例:
City of Lost Children, The (Cité des enfants perdus, La) (1999)→ 拆分后clean_title是City of Lost Children, The (Cité des enfants perdus, La),release_year是1999City of Lost Children, The. Cité des enfants perdus, La) (1999)→ 拆分后clean_title是City of Lost Children, The. Cité des enfants perdus, La),release_year是1999
完全符合你的期望!
额外小提示
如果有些标题没有年份括号,str.extract会返回NaN,你可以用fillna处理这些情况:
# 处理缺失的年份值 movies['release_year'] = movies['release_year'].fillna('Unknown')
内容的提问来源于stack exchange,提问作者vivace
相关产品推荐
相关产品推荐

