如何检查 Pandas DataFrame 的稀疏性?

How can I check the sparsity of a Pandas DataFrame?

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

df = pd.DataFrame({'a':[1,0,1,1,3], 'b':[0,0,0,0,1], 'c':[4,0,0,0,0], 'd':[0,0,3,0,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

截至 2021 年 9 月 16 日(而且,我想说,适用于 2019 年 7 月发布的 > 0.25.0 的任何版本)sparse accessor 给出 DataFrame.sparse.density,这正是您正在寻找。

当然,为了做到这一点,您需要实际转换为稀疏 DataFrame:df.astype(pd.SparseDtype("int", 0))