如何在Pandas中选择没有NaN值的行(附实例)

1,020 阅读1分钟

你可以使用以下方法来选择pandas中没有NaN值的行。

方法1:选择所有列中没有NaN值的行

df[~df.isnull().any(axis=1)]

方法2: 选择特定列中没有NaN值的行

df[~df['this_column'].isna()]

下面的例子展示了如何在实践中使用每一种方法,包括以下pandas DataFrame:

import pandas as pd
import numpy as np

#create DataFrame
df = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
                   'points': [np.nan, 12, 15, 25, np.nan, 22, 30],
                   'assists': [4, np.nan, 5, 9, 12, 14, 10]})

#view DataFrame
print(df)

  team  points  assists
0    A     NaN      4.0
1    B    12.0      NaN
2    C    15.0      5.0
3    D    25.0      9.0
4    E     NaN     12.0
5    F    22.0     14.0
6    G    30.0     10.0

例1: 选择所有列中没有NaN值的行

我们可以使用下面的语法来选择DataFrame的每一列中没有NaN值的行:

#create new DataFrame that only contains rows without NaNs
no_nans = df[~df.isnull().any(axis=1)]

#view results
print(no_nans)

  team  points  assists
2    C    15.0      5.0
3    D    25.0      9.0
5    F    22.0     14.0
6    G    30.0     10.0   

请注意,所得到的DataFrame中的每一行都不包含任何列中的NaN值。

例2:选择特定列中没有NaN值的行

我们可以使用下面的语法来选择DataFrame的点数列中没有NaN值的行:

#create new DataFrame that only contains rows without NaNs in points column
no_points_nans = df[~df['points'].isna()]

#view results
print(no_points_nans)

  team  points  assists
1    B    12.0      NaN
2    C    15.0      5.0
3    D    25.0      9.0
5    F    22.0     14.0
6    G    30.0     10.0

请注意,所得到的DataFrame中的每一行在点数列中都不包含NaN值。

有一行在助攻列中有一个NaN值,但该行被保留在DataFrame中,因为该行的积分列中的值不是NaN。