面板的DataFrame由带有Pandas的非唯一列索引

时间:2012-01-21 22:12:10

标签: python dataframe panels pandas

下面的代码应该做我想要的,但是当循环完成20%时它需要10gb的ram。

# 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)

1 个答案:

答案 0 :(得分:2)

我在这里创建了一个GitHub问题。

https://github.com/wesm/pandas/issues/663

我很确定我在NumPy ndarray视图之间找到了导致内存泄漏的循环引用。刚刚提交修复:

https://github.com/wesm/pandas/commit/4c3916310a86c3e4dab6d30858a984a6f4a64103

您可以从源代码安装并让我知道这是否可以解决您的问题?

顺便说一下,您可以尝试使用SparsePanel而不是Panel,因为Panel会将所有子数据框转换为密集形式。

最后,您可以考虑使用groupby替代SparseDataFrame的O(N * M)切割。它甚至更短:

pan = dict(pd.groupby('Member'))