【发布时间】:2017-01-11 05:51:29
【问题描述】:
我有以下代码用于 df 的掩码过滤:
for i, y in enumerate(cols) :
dfm = df[y].str.contains(s)
mask= dfm if i==0 else np.column_stack((mask, dfm))
df不是稀疏的,但是过滤结果掩码是稀疏的。
当有一个大数据帧(50mio 行 * 100 列)时,以完整的布尔值存储掩码会消耗大量内存。
所以,由于掩码结果非常稀疏(0.1% 为 TRUE),想知道是否有办法使用稀疏布尔掩码代替数组掩码以减少内存负载...
即使 Pandas 中已经存在稀疏数组,也找不到任何解决方案。 由于尚不清楚如何将其用于掩码存储和使用。 即
mask_sparse = pd.SparseArray(mask)
编辑 2:澄清问题: 我们可以直接将过滤结果掩码获取到稀疏数组中吗 无需操作整个数组?
【问题讨论】:
-
我很困惑。你需要付出更多的努力来解释你拥有、想要和尝试过的东西。阅读本文以更好地了解如何最大限度地提高您的问题得到回答的机会...mcve
-
谢谢,我已经编辑了我的问题以使其更清晰。
-
stackoverflow.com/questions/36523861/… 是我发现的唯一一个讨论
pd.SparseArray的 SO 问题。还有一些处理稀疏数据帧或序列的其他方法。 -
stackoverflow.com/questions/41505416/… 是关于使用
scipy稀疏矩阵进行屏蔽。即使有了那些更简单的对象,它也不是微不足道的。
标签: pandas numpy sparse-matrix