You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从两个稀疏格式DataFrame生成无冗余零值的COO矩阵

解决稀疏DataFrame拼接后转COO矩阵出现零值的问题

问题原因

核心问题出在fillna(0)的误用:你的稀疏DataFrame采用pd.SparseDtype("float", 0),已经将缺失值默认视为填充值0,这类属于「隐式零」,不会占用实际存储空间。但fillna(0)会强制把这些隐式零转换成「显式零」,直接写入稀疏数组的存储列表(sp_values),最终导致COO矩阵的data属性出现多余零值。

解决方案

不需要调用fillna(0),直接对拼接后的稀疏DataFrame执行sparse.to_coo()即可。pandas在拼接稀疏DataFrame时会自动对齐索引和列,缺失位置会保持稀疏类型的隐式零,不会被显式存储。

修正后的代码

import pandas as pd
import numpy as np

A = pd.DataFrame(np.eye(3), index=['a','b','c'],
                 columns=['a','b','c']).astype(pd.SparseDtype("float", 0))

B = pd.DataFrame(np.random.normal(size=(2,2)),
                 index=['d','e'],
                 columns=['a','b'],
                 ).astype(pd.SparseDtype("float", 0))

# 直接拼接,无需fillna(0)
c = pd.concat([A, B], axis=0)
# 转换为COO矩阵
coo_matrix = c.sparse.to_coo()

# 验证data中无零值
print(all(coo_matrix.data != 0))  # 输出True

补充说明

拼接后,像B没有的列c,pandas会自动为B的行填充隐式零,这些值不会被存储到稀疏数组中。你可以通过c.sparse.sp_values查看实际存储的非零值,确认没有多余的零占用空间。

内容的提问来源于stack exchange,提问作者mfastudillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:04:53