如果值在列中,如何删除 Pandas 行

How to drop a Pandas row if a value is in a column

我有一个 Pandas 数据框,其中一列 director_name 包含电影导演,另一列 death_year 包含 NaN 或描述的浮点数他们去世的年份(例如:1996.00)。如何删除所有拥有已去世董事的行,如 death_year 列中的浮点数所示?

     nconst     director_name       birth_year       death_year 
0   nm0061671   Mary Ellen Bauder    1967.00            NaN     
1   nm0061865   Joseph Bauer          NaN             1996.00   
2   nm0062070   Bruce Baum           1981.00            NaN     
3   nm0062195   Axel Baumann          NaN             2015.00
4   nm0062798   Pete Baxter          1954.00            NaN 

所以在上面的数据框中,第 1 行和第 3 行将被删除,因为 Joseph Bauer 于 1996 年去世,Axel Baumann 于 2015 年去世。结果是只有在世董事的数据框:

     nconst     director_name       birth_year       death_year 
0   nm0061671   Mary Ellen Bauder    1967.00            NaN     
1   nm0062070   Bruce Baum           1981.00            NaN     
2   nm0062798   Pete Baxter          1954.00            NaN 

DataFrame 很大,它包含太多行,无法实际检查并确保有人没有错误地输入死亡年份,例如 0000.000。

您可以使用 .loc.notna():

df.loc[df['birth_year'].notna()].reset_index(drop=True)

如果您想按 death_year 删除行,请使用 .isna():

df.loc[df['death_year'].isna()].reset_index(drop=True)

输出:

       nconst       director_name    birth_year   death_year 
0   nm0061671   Mary Ellen Bauder       1967.00          NaN     
1   nm0062070          Bruce Baum       1981.00          NaN     
2   nm0062798         Pete Baxter       1954.00          NaN

在这两种情况下,我们对您粘贴的示例都有相同的输出。您可以选择更适合整个数据框的内容。

我注意到当 'death_year' 不是 NaN 时,birth_year 是。

df.dropna(subset=['birth_year'], inplace=True)