2 回答

TA贡献1780条经验 获得超1个赞
在我看来,最简单的方法是删除0值boolean indexing,然后sort_values:
s = df.isna().sum()
s = s[s != 0].sort_values(ascending=False)
或any仅用于过滤至少有一个True(one NaN) 的列:
df1 = df.isna()
s = df1.loc[:, df1.any()].sum().sort_values(ascending=False)
样本:
df = pd.DataFrame({
'A':list('abcdef'),
'B':[np.nan,5,np.nan,5,5,np.nan],
'C':[7,8,9,np.nan,2,3],
'D':[1,3,5,7,1,0],
'E':[np.nan,3,6,9,2,np.nan],
'F':list('aaabbb')
})
s = df.isna().sum()
s = s[s != 0].sort_values(ascending=False)
print (s)
B 3
E 2
C 1
dtype: int64

TA贡献1900条经验 获得超5个赞
您可以使用pipe从总计中删除零值:
>>> df.isnull().sum().sort_values(ascending=False).pipe(lambda s: s[s > 0])
B 3
E 2
C 1
dtype: int64
添加回答
举报