1

次のコードは私が望むことを行うはずですが、ループで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)
4

1 に答える 1

2

ここで GitHub の問題を作成しました。

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

NumPy ndarray ビュー間の循環参照がメモリ リークを引き起こしていることを確認したと確信しています。修正をコミットしました:

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

ソースからインストールして、問題が解決するかどうか教えてもらえますか?

ところで、Panel の代わりに SparsePanel を使用してみてください。これは、Panel がすべてのサブ DataFrame を密な形式に変換するためです。

最後に、SparseDataFrame を分割する代わりに、groupby を使用することを検討してO(N * M)ください。それはさらに短いです:

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

于 2012-01-21T23:05:12.563 に答える