如何在Pandas数据框中查找包含任何NaN值的列

39 浏览
0 Comments

如何在Pandas数据框中查找包含任何NaN值的列

给定一个包含可能散落的NaN值的pandas数据帧:

问题:我如何确定哪些列包含NaN值?特别是,我能否获取包含NaN的列名的列表?

admin 更改状态以发布 2023年5月25日
0
0 Comments

你可以使用df.isnull().sum()。它会显示所有列的每个特征的NaN值总数。

0
0 Comments

更新: 使用 Pandas 0.22.0

较新版本的 Pandas 有新方法'DataFrame.isna()''DataFrame.notna()'

In [71]: df
Out[71]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  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
In [72]: df.isna().any()
Out[72]:
a     True
b     True
c    False
dtype: bool

作为列的列表:

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

选择那些至少包含一个NaN值的列:

In [73]: df.loc[:, df.isna().any()]
Out[73]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
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():

In [97]: df
Out[97]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  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
In [98]: pd.isnull(df).sum() > 0
Out[98]:
a     True
b     True
c    False
dtype: bool

或者像@root提出的更清晰版本:

In [5]: df.isnull().any()
Out[5]:
a     True
b     True
c    False
dtype: bool
In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']

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

In [31]: df.loc[:, df.isnull().any()]
Out[31]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
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

0