首页 > 解决方案 > total= df.isnull().sum(), percent1= df.count(),percent= df.isnull().count() 有什么区别?

问题描述

谁能说出 total= df.isnull().sum(), percent1= df.count(), df.isnull().count() 之间的区别,因为理想情况下 df.isnull().count() 应该给出所有仅计算空值,但它正在计算所有值。谁能帮助我理解这一点?

下面是我得到变量总输出的代码,因为只有空值计数和百分比1,因为只有非空值计数和百分比作为所有值的计数,无论是否为空。

total= df.isnull().sum().sort_values(ascending=False)
percent1= df.count()#helps to get all the non null values count
percent= df.isnull().count()
print(total)
print(percent1)
print(percent)

标签: pandas

解决方案


根据文档计数的定义是:

计算每一列或每一行的非 NA 单元格。

并使用isnull(或isna)将您df在其中的任何类型的数据框更改为布尔数据框,True其中 nan 最初是哪里df,否则为 False,nan此数据框中没有更多的数据框,因此count将返回不存在 nandf.isnull()的行数df在里面。举个例子:

df = pd.DataFrame({'a':range(4), 'b':[1,np.nan, 3, np.nan]})
print (df)
   a    b
0  0  1.0
1  1  NaN
2  2  3.0
3  3  NaN

如果你count在这个数据框上使用你会得到:

print (df.count())
a    4
b    2 # here you get 2 because you have 2 nan in the column b as defined above
dtype: int64

但如果你使用isnull它,你会得到

print (df.isnull())
       a      b
0  False  False
1  False   True #was nan in column b in df
2  False  False
3  False   True

在这里你没有nan了,所以结果count将是两列的行数

print (df.isnull().count())
a    4
b    4 #no more nan in df.isnull()
dtype: int64

但是因为True实际上等于1又False等于0,那么使用该sum方法会为每个Truein加一,原来的df.isnull()意思是innandf

print (df.isnull().sum())
a    0 # because only False in column a of df.isnull()
b    2 # because you have two True in df.isnull() in column b
dtype: int64 

最后,你可以看到这样的关系:

(df.count()+df.isnull().sum())==df.isnull().count()

推荐阅读