下面的代码应该做我想做的事,但是当循环完成 20% 时它需要 10gb 的内存。
# In [4]: type(pd)
# Out[4]: pandas.sparse.frame.SparseDataFrame
memid = unique(pd.Member)
pan = {}
for mem in memid:
pan[mem] = pd[pd.Member==mem]
goal = pandas.Panel(pan)
我在这里创建了一个 GitHub 问题。
https://github.com/wesm/pandas/issues/663
我很确定我确定了 NumPy ndarray 视图之间的循环引用导致内存泄漏。刚刚提交了一个修复:
https://github.com/wesm/pandas/commit/4c3916310a86c3e4dab6d30858a984a6f4a64103
您可以从源代码安装并让我知道是否可以解决您的问题吗?
顺便说一句,您可以尝试使用 SparsePanel 而不是 Panel,因为 Panel 会将所有子 DataFrame 转换为密集形式。
最后,您可以考虑使用 groupby 作为O(N * M)
分割 SparseDataFrame 的替代方法。它甚至更短:
pan = dict(pd.groupby('Member'))