2

pandasシリーズのインデックスを再作成するときにメモリ使用量が多いのはなぜでしょうか。

簡単なデータセットを作成します。

a = pd.Series(np.arange(5e7, dtype=np.double))

私のUbuntuによるとtop、セッション全体は約820MBです。

これをスライスして最初の 100 要素を抽出すると、次のようになります。

a_sliced = a[:100]

これは、メモリ消費量の増加を示していません。

代わりaに、同じ範囲でインデックスを再作成すると、次のようになります。

a_reindexed = a.reindex(np.arange(100))

約1.8GBのメモリ消費があります。gc.collectクリーンアップも成功せずに試みました。

これが予期されているかどうか、および大きなメモリ オーバーヘッドなしで大きなデータセットのインデックスを再作成する回避策があるかどうかを知りたいです。

pandasgithubのごく最近のスナップショットを使用しています。

4

2 に答える 2

2

参考までに、非常に慎重に設定してくださいcopy=False。これは、いくつかの奇妙な効果を引き起こす可能性があります。インデックスのサイズに比べてデータが大きい場合 (実際のように見えます)、インデックスのコピーは「安価」です。

インデックスの再作成後に関連付けられたメモリを削除する場合は、次のようにします。

s = a_big_series
s2 = s.reindex(....)

基になるデータは古いデータの単なるビューであるため、メモリは引き続き使用されます (スライス方法によって異なります。コピーの可能性がありますが、これは numpy 依存です)。

s2 = s.reindex(....).copy()
del s

これでメモリが解放されます

于 2013-08-06T12:26:54.120 に答える