如何在dataframe中查找哪些列包含任何NaN值

给定一个包含分散在各处的可能NaN值的数据帧:

问题:如何确定哪些列包含NaN值?特别是,我可以得到包含NaN的列名列表吗

更新:使用熊猫0.22.0

较新版本有新方法“DataFrame.isna()”和“DataFrame.notna()”

[71]on

:df
Output[71]:
a、b、c
0.7.0
1 0.0 NaN 4
2.0南4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1
At[72]on:df.isna().any()
Output[72]:
真实的
b是的
c错误
数据类型:bool

作为列列表:

[74]on

:df.columns[df.isna().any()].tolist()
Out[74]:[a',b']

要选择这些列(至少包含一个NaN值):

[73]on

:df.loc[:,df.isna().any()]
Output[73]:
a b
0.7.0
10.0南
2.0南
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

旧答案:

尝试使用isnull():

[97]on

:df
Output[97]:
a、b、c
0.7.0
1 0.0 NaN 4
2.0南4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1
At[98]on:pd.isnull(df.sum()>0
Output[98]:
真实的
b是的
c错误
数据类型:bool

或作为@root建议的更清晰版本:

[5]on

:df.isnull().any()
Output[5]:
真实的
b是的
c错误
数据类型:bool
At[7]on:df.columns[df.isnull().any()].tolist()
Out[7]:[a',b']

要选择子集-至少包含一个NaN值的所有列:

[31]on

:df.loc[:,df.isnull().any()]
Output[31]:
a b
0.7.0
10.0南
2.0南
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

发表评论