pandas fillna 的稀疏数据帧密度问题
pandas Sparse dataframe density issue with fillna
我正在尝试在 pandas 中创建一个稀疏数据框。我通过
创建初始数据框
df = pd.read_sql(sql=sql, con=db_eng, index_col=index)
idx = pd.MultiIndex.from_product([df.index.levels[0], df.index.levels[1]], names=df.index.names)
my_df = df.reindex(idx)
然后使用以下方法使其变得稀疏
s1 = my_df.to_sparse()
s2 = my_df.to_sparse(fill_value=0)
s2 = my_df.to_sparse().fillna(value=0)
当我检查 s1, s2, s3
的密度时,我得到了不同的值:
>>> s1.density
0.054158277796754875
>>> s2.density
1.0
>>> s3.density
0.054158277796754875
为什么第二种方法给我的密度是 1?
我无权访问您的数据,但看起来您的 "empty" 值是 NaN
,因此在基于 0 值(即 s2
)使其稀疏时,那么稀疏数据框根本就不稀疏。
这会 return 您所期望的:
s2 = my_df.fillna(0).to_sparse(fill_value=0)
现在你的 "empty" 值为 0,所以用 fill_value=0
调用 to_sparse
实际上会使你的数据帧稀疏。
编辑:换句话说,to_sparse
将使您的数据帧基于 fill_value
稀疏,默认情况下为 NaN
。
如果在填充有 NaN
值的数据帧上使用 fill_value=0
调用 to_sparse
,则生成的数据帧根本不稀疏(密度 = 1.0
),它充满了 NaN
个值。
您应该阅读介绍:http://pandas.pydata.org/pandas-docs/stable/sparse.html。
我正在尝试在 pandas 中创建一个稀疏数据框。我通过
创建初始数据框df = pd.read_sql(sql=sql, con=db_eng, index_col=index)
idx = pd.MultiIndex.from_product([df.index.levels[0], df.index.levels[1]], names=df.index.names)
my_df = df.reindex(idx)
然后使用以下方法使其变得稀疏
s1 = my_df.to_sparse()
s2 = my_df.to_sparse(fill_value=0)
s2 = my_df.to_sparse().fillna(value=0)
当我检查 s1, s2, s3
的密度时,我得到了不同的值:
>>> s1.density
0.054158277796754875
>>> s2.density
1.0
>>> s3.density
0.054158277796754875
为什么第二种方法给我的密度是 1?
我无权访问您的数据,但看起来您的 "empty" 值是 NaN
,因此在基于 0 值(即 s2
)使其稀疏时,那么稀疏数据框根本就不稀疏。
这会 return 您所期望的:
s2 = my_df.fillna(0).to_sparse(fill_value=0)
现在你的 "empty" 值为 0,所以用 fill_value=0
调用 to_sparse
实际上会使你的数据帧稀疏。
编辑:换句话说,to_sparse
将使您的数据帧基于 fill_value
稀疏,默认情况下为 NaN
。
如果在填充有 NaN
值的数据帧上使用 fill_value=0
调用 to_sparse
,则生成的数据帧根本不稀疏(密度 = 1.0
),它充满了 NaN
个值。
您应该阅读介绍:http://pandas.pydata.org/pandas-docs/stable/sparse.html。