【问题标题】:Pandas sparse dataframe multiplicationPandas 稀疏数据帧乘法
【发布时间】:2022-12-17 19:36:52
【问题描述】:

我有两个 pandas 稀疏数据帧,big_sdf 和 bigger_sdf。

当我尝试将它们相乘时:

result = big_sdf @ bigger_sdf

我得到一个错误。

所以我尝试将这些稀疏数据帧转换为 SciPy 的 csr 矩阵并将其相乘,但转换没有成功:

from scipy.sparse import csr_matrix
csr_big = csr_matrix(big_sdf)
csr_bigger = csr_matrix(bigger_sdf)

当我运行最后一行时,我收到一条错误消息:

"ValueError: unrecognized csr_matrix constructor usage"

它只发生在较大的矩阵上,较小的矩阵成功转换。

有任何想法吗?也许有一种 Pandas 本机方法可以乘以我错过的稀疏数据帧?

提前致谢!

【问题讨论】:

  • csr_matrix 不“知道”任何关于“稀疏数据帧”的具体信息。 csr_matrix(big_sdf) 首先执行np.as_array(big_sdf),或有效地执行big_sdf.to_numpy()。比较你的两个框架,看看有什么不同。
  • 实际上,我应该首先询问完整的错误消息,或者因为你谈到了两个错误的消息。

标签: python pandas scipy sparse-matrix sparse-dataframe


【解决方案1】:

看起来您遇到此错误是因为 SciPy 中的 csr_matrix() 构造函数期望数据和索引参数作为单独的参数传递,而不是作为单个 DataFrame 对象传递。

要修复此错误并将 Pandas DataFrame 对象转换为 csr_matrix 对象,您可以使用 DataFrame 上的 .to_coo() 方法将其转换为 SciPy coo_matrix 对象,然后使用 coo_matrix 上的 .tocsr() 方法将其转换到 csr_matrix 对象。

以下是如何使用这些方法将 DataFrame 对象转换为 csr_matrix 对象的示例:

from scipy.sparse import csr_matrix, coo_matrix

# convert the big_sdf DataFrame to a coo_matrix
coo_big = big_sdf.to_coo()

# convert the coo_matrix to a csr_matrix
csr_big = coo_big.tocsr()

# convert the bigger_sdf DataFrame to a coo_matrix
coo_bigger = bigger_sdf.to_coo()

# convert the coo_matrix to a csr_matrix
csr_bigger = coo_bigger.tocsr()

# multiply the csr_matrix objects
result = csr_big * csr_bigger

【讨论】:

    猜你喜欢
    • 2016-09-19
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2018-07-19
    • 1970-01-01
    • 2021-05-18
    • 2013-12-25
    相关资源
    最近更新 更多