首页 文章

Python Pandas:检查行中的所有列值是否为NaN

提问于
浏览
4

如果我的问题已经得到答复,请接受我的道歉 . 我试图找到一个解决方案,但我能找到的只是在数据帧中为所有NaN提供解决方案 . 我的问题是我有一个包含6列和500行的数据帧 . 我需要检查在任何特定行中是否所有值都是NaN,以便我可以从我的数据集中删除它们 . 第2,6和7行下面的示例包含从col1到col6的所有Nan:

Col1    Col2    Col3    Col4    Col5    Col6
    12      25      02      78      88      90
    Nan     Nan     Nan     Nan     Nan     Nan
    Nan     35      03      11      65      53
    Nan     Nan     Nan     Nan     22      21
    Nan     15      93      111     165     153
    Nan     Nan     Nan     Nan     Nan     Nan
    Nan     Nan     Nan     Nan     Nan     Nan
    141     121     Nan     Nan     Nan     Nan

请注意,顶行只是 Headers ,从我的数据开始的第二行开始 . 如果有人能帮我正确解决这个难题,将不胜感激 .

而且我的第二个问题是,如果我想要删除缺少4或5列数据的行,那么在删除所有列中的所有Nan后,那将是最佳解决方案 .

最后一个问题是,在删除大多数Nan的行之后是否可能,那么如何在其余的450行上创建箱形图?

任何回复都将受到高度赞赏 .

问候,

2 回答

  • 4

    我需要检查在任何特定行中是否所有值都是NaN,以便我可以从我的数据集中删除它们 .

    这正是pd.DataFrame.dropna(how='all')的作用:

    In [3]: df = pd.DataFrame({'a': [None, 1, None], 'b': [None, 1, 2]})
    
    In [4]: df
    Out[4]: 
         a    b
    0  NaN  NaN
    1  1.0  1.0
    2  NaN  2.0
    
    In [5]: df.dropna(how='all')
    Out[5]: 
         a    b
    1  1.0  1.0
    2  NaN  2.0
    

    关于你的第二个问题,pd.DataFrame.boxplot会这样做 . 您可以使用 column 参数指定所需的列(如果需要) . 另见the example in the docs .

  • 3

    对于那些搜索,因为希望知道问题 Headers :

    检查行中的所有列值是否为NaN

    一个简单的方法是:

    df[[list_of_cols_to_check]].isnull().apply(lambda x: all(x), axis=1)
    

    import pandas as pd
    import numpy as np
    
    
    df = pd.DataFrame({'movie': [np.nan, 'thg', 'mol', 'mol', 'lob', 'lob'],
                      'rating': [np.nan, 4., 5., np.nan, np.nan, np.nan],
                      'name':   ['John', np.nan, 'N/A', 'Graham', np.nan, np.nan]}) 
    df.head()
    

    enter image description here


    要检查所有列是否为NaN:

    cols_to_check = df.columns
    df['is_na'] = df[cols_to_check].isnull().apply(lambda x: all(x), axis=1) 
    df.head()
    

    enter image description here


    要检查列的“名称”,“评级”是否为NaN:

    cols_to_check = ['name', 'rating']
    df['is_na'] = df[cols_to_check].isnull().apply(lambda x: all(x), axis=1) 
    df.head()
    

    enter image description here

相关问题