你可以使用以下方法来选择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。