Pandas在多列中缺少值的行

时间:2017-05-02 19:46:37

标签: python-3.x pandas

我有一个包含agedatelocation列的数据框。

  1. 我想计算所有列中有多少行是空的(不是一些行,而是同时的所有行)。我有以下代码,每行独立工作,但我怎么说age AND date AND location isnull?

    df['age'].isnull().sum()
    df['date'].isnull().sum()
    df['location'].isnull().sum()
    
  2. 我希望在删除所有这三列中缺少值的行后返回一个数据帧,所以类似以下几行,但在一个语句中合并:

    df.mask(row['location'].isnull())
    df[np.isfinite(df['age'])]
    df[np.isfinite(df['date'])]
    

2 个答案:

答案 0 :(得分:1)

您可以通过

找到所有NaN的行数
len(df) - len(df.dropna(how = 'all'))

并按

删除
df = df.dropna(how = 'all')

这将删除具有所有NaN值的行

答案 1 :(得分:1)

您基本上可以使用您的方法,但删除列索引:

.sum()

第一个.sum()返回每列值,而第二个NaN将返回所有df.dropna()值的总和。

Vaishali's answer类似,您可以使用NaN删除NoneIn [45]: df = pd.DataFrame({'age': [1, 2, 3, np.NaN, 4, None], 'date': [1, 2, 3, 4, None, 5], 'location': ['a', 'b', 'c', None, 'e', 'f']}) In [46]: df Out[46]: age date location 0 1.0 1.0 a 1 2.0 2.0 b 2 3.0 3.0 c 3 NaN 4.0 None 4 4.0 NaN e 5 NaN 5.0 f In [47]: df.isnull().sum().sum() Out[47]: 4 In [48]: df.dropna() Out[48]: age date location 0 1.0 1.0 a 1 2.0 2.0 b 2 3.0 3.0 c 的所有值,并仅返回已清理的DataFrame。

{{1}}