python - 从字符串电影名称的列中提取年份
问题描述
我有以下数据,在名为 train_df 的表中有两列,“name”和“gross”:
gross name
760507625.0 Avatar (2009)
658672302.0 Titanic (1997)
652270625.0 Jurassic World (2015)
623357910.0 The Avengers (2012)
534858444.0 The Dark Knight (2008)
532177324.0 Rogue One (2016)
474544677.0 Star Wars: Episode I - The Phantom Menace (1999)
459005868.0 Avengers: Age of Ultron (2015)
448139099.0 The Dark Knight Rises (2012)
436471036.0 Shrek 2 (2004)
424668047.0 The Hunger Games: Catching Fire (2013)
423315812.0 Pirates of the Caribbean: Dead Man's Chest (2006)
415004880.0 Toy Story 3 (2010)
409013994.0 Iron Man 3 (2013)
408084349.0 Captain America: Civil War (2016)
408010692.0 The Hunger Games (2012)
403706375.0 Spider-Man (2002)
402453882.0 Jurassic Park (1993)
402111870.0 Transformers: Revenge of the Fallen (2009)
400738009.0 Frozen (2013)
381011219.0 Harry Potter and the Deathly Hallows: Part 2 (2011)
380843261.0 Finding Nemo (2003)
380262555.0 Star Wars: Episode III - Revenge of the Sith (2005)
373585825.0 Spider-Man 2 (2004)
370782930.0 The Passion of the Christ (2004)
我想从“name”中读取并提取日期以创建一个名为“year”的新列,然后我将使用它来按特定年份过滤数据集。新表如下所示:
year gross name
2009 760507625.0 Avatar (2009)
1997 658672302.0 Titanic (1997)
2015 652270625.0 Jurassic World (2015)
2012 623357910.0 The Avengers (2012)
2008 534858444.0 The Dark Knight (2008)
我尝试了 apply 和 lambda 方法,但没有得到任何结果:
train_df[train_df.apply(lambda row: row['name'].startswith('2014'),axis=1)]
有没有办法使用包含(如在 C# 或“isin”中过滤 python 中的字符串?
解决方案
您可以为此使用正则表达式pandas.Series.str.extract
:
df["year"] = df["name"].str.extract(r"\((\d{4})\)$", expand=False)
df["year"] = pd.to_numeric(df["year"])
print(df.head())
gross name year
0 760507625.0 Avatar (2009) 2009
1 658672302.0 Titanic (1997) 1997
2 652270625.0 Jurassic World (2015) 2015
3 623357910.0 The Avengers (2012) 2012
4 534858444.0 The Dark Knight (2008) 2008
正则表达式:
\(
: 找到有文字左括号的地方(\d{4})
然后,找到彼此相邻出现的 4 个数字- 这里的括号表示我们将 4 位数字存储为捕获组(在这种情况下,它是我们要从较大字符串中提取的数字组)
\)
: 然后,找到一个右括号$
:以上所有内容必须出现在字符串的末尾
当满足上述所有条件时,获取这 4 位数字,或者如果未获得匹配项,则返回该行的 NaN。
推荐阅读
- javascript - 无法解析“css-loader!autoprefixer-loader”
- php - 带有 preg_replace_callback 的正则表达式用于亵渎过滤器
- java - 如何将开关传递给我的 Android 应用程序以控制其在开发过程中的行为?
- awk - 如何仅从文件中提取与每个模式匹配的第一行?
- ansible - 当两个 Ansible 列表有匹配的变量时合并选择变量
- javafx - Second event showing up too quickly in javafx event handling
- java - 了解 Eureka 客户端缓存
- opencv - OpenCV 在 Windows Visual Studio 上构建错误:'setlocal' 未被识别为内部或外部命令
- python - Convert multiple column dataframe into series
- json - 访问 JSON 数组中的项目并显示对象数据