python - 有效地将 pandas 数据帧转换为 scipy 稀疏矩阵
问题描述
我正在尝试将 pandas Dataframe 转换为 scipy 稀疏矩阵,以有效地使用许多功能。
但是我没有找到一种有效的方法来访问数据框中的值,所以在进行转换时我总是会耗尽内存。我尝试了以下两种解决方案,但它们都不起作用。我研究了很多,但没有找到更好的。如果有人有建议,我很乐意对其进行测试。
sparse_array = sparse.csc_matrix(df.values)
sparse_array = sparse.csc_matrix(df.to_numpy())
解决方案
如果您的数据框非常稀疏,您可以按列转换,然后堆叠:
from scipy import sparse
sparse_array = sparse.hstack([sparse.csc_matrix(df[i].values.reshape(-1, 1)) for i in df.columns])
但最好的办法可能是将它变成一个稀疏的数据框:
for i in df.columns:
df[i] = df[i].astype(pd.SparseDtype(df[i].dtype))
sparse_array = sparse.csc_matrix(df.sparse.to_coo())
(请注意,如果您的 dtype 在整个数据框中不均匀,则可能会出现问题)。
推荐阅读
- javascript - 如何从几个相同的值中获取一个值?
- python - Python Webscraping - 无法使用 URL 解析功能获取元素
- rest - Oracle Apex 20 - 交互式报告中列上的 REST 源操作
- airflow - 如果输入数据发生变化,如何重新运行 Airflow 作业
- reactjs - 多级嵌套路由在反应应用程序中不起作用
- python - eth-brownie - 没有命名模块
- jquery - Chartist.js:如何设置饼图切片颜色
- sql - SQL 获取每个请求的不同记录
- php - 我在操作中使用 url 并得到 404 not found 但路由存在,当我使用路由时,我得到错误 route is not defined in Laravel
- sctp - SCTP 消息未启动