python - 如何在 Pandas 数据框中查找哪些列包含任何 NaN 值

标签 python pandas dataframe nan

给定一个 pandas 数据框,其中包含分散在各处的可能 NaN 值:

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

最佳答案

更新:使用 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

关于python - 如何在 Pandas 数据框中查找哪些列包含任何 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36226083/

相关文章:

Python 列表推导式、子列表行和列

python - 如何使用 REST API 复制 protected Google 表格范围内的用户?

python - Pandas 将 groupby sum 值分配给原始表中的最后一行

r - 将R中的多个二进制列合并为一列并保留位置

python - 如何在日期中添加工作日(不包括节假日)

python - 如何将频率列中的每个元素转换为新的数据框行?

python - python中困惑的值范围

python - pytest 错误(pytest 和 TDD 新手)

python - 在matplotlib中从pandas系列制作线图时显示分类x轴值

python - 如何在 python 中使用时间戳在数据框中进行小时计算?