如何检查 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))
在 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))