2012-01-21 8 views
1

次のコードは、私が望むようにすべきですが、ループで20%完了するまでに10GBのRAMが必要です。パンダで非ユニークな列でインデックス付けされたDataFrame

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

はSparseDataFrameの寸法( 'pd.shape')と密度(' pd.density')は何ですか?何が起こったのかを診断しようとするために私にオブジェクトのピクル( 'pd.save(file_path)')を電子メールで送ることができます。ところで、これらの質問は、SOよりもメーリングリストでうまくいくはずです。 –

+0

pd.shape =(2668990,232) –

+0

pd.density = 0.12814551216649045ファイルが大きすぎてメールで送信できません。 –

答えて

2

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

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

私はメモリリークを起こしnumpyのndarrayビュー間の循環参照を識別かなり確信しています。

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

あなたはソースからインストールすると、それはあなたの問題を修正するなら、私に知らせることができます:ちょうど修正を約束?

ところで、パネルでは、すべてのサブデータフレームを密なフォームに変換するので、Panelの代わりにSparsePanelを使用してみてください。

最後に、O(N * M)のSparseDataFrameのチョップアップの代わりにgroupbyを使用することを検討することもできます。それも短いです:

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

+0

私が走っているバージョンは昨夜のgitクローンです。 SparsePanelに感謝します。 pan = dict(pd.groupby( 'Member'))を実行すると、次のような結果が得られます。RuntimeError:Pythonオブジェクトの呼び出し時に最大再帰深度を超えました。実際のオブジェクトはロード時に1GB未満を占めますが、ループによってRAMがゆっくり食べられます。私は質問を今からメールリストに向けます。 –

+0

SparseDataFrameのgroupby問題である必要があります。私は一見を持っている必要があります。どういうわけか、SparseDataFrameのgzipされたピクルスを何らかの方法で取得できれば(それは100メガバイト未満にする必要があります)、私はもっとよく見ることができます –

関連する問題