如何检查Pandas DataFrame的稀疏性?

问题描述

在Pandas中,如何检查DataFrame的稀疏程度?有可用的功能,还是我需要编写自己的功能
现在,我有这个:

df = pd.DataFrame({'a':[1,1,3],'b':[0,1],'c':[4,0],'d':[0,3,0]})
    a   b   c   d
0   1   0   4   0
1   0   0   0   0
2   1   0   0   3
3   1   0   0   0
4   3   1   0   0
sparsity = sum((df == 0).astype(int).sum())/df.size

将零的数量除以元素的总数,在此示例中为0.65。
想知道是否有更好的方法可以做到这一点。并且,如果有任何函数可以提供有关稀疏度的更多信息(例如NaN,则其他任何重要数字,例如-1)。

解决方法

解决方案的一个主意是将其转换为numpy数组,进行比较并使用mean

a = (df.to_numpy() == 0).mean()
print (a)
0.65

如果想使用Sparse dtypes,可以使用:

#convert each column to SparseArray
sparr = df.apply(pd.arrays.SparseArray)
print (sparr)
   a  b  c  d
0  1  0  4  0
1  0  0  0  0
2  1  0  0  3
3  1  0  0  0
4  3  1  0  0

print (sparr.dtypes)
a    Sparse[int64,0]
b    Sparse[int64,0]
c    Sparse[int64,0]
d    Sparse[int64,0]
dtype: object

print (sparr.sparse.density)
0.35