首页 文章

如何在Pandas数据帧(python)中查找哪些列包含任何NaN值

提问于
浏览
66

给定一个pandas数据帧,其中包含(可能)NaN值分散在这里和那里:

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

谢谢

3 回答

  • 0

    UPDATE: 使用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
    

    OLD answer:

    尝试使用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
    
  • 130

    你可以使用 df.isnull().sum() . 它显示了每个要素的所有列和总NaN .

  • 10

    我使用这三行代码打印出包含至少一个空值的列名:

    for column in dataframe:
        if dataframe[column].isnull().any():
           print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))
    

相关问题