パンダのデータフレームがメモリから適切にクリアされない理由を理解しています。私のマシンが約16MBのメモリに達した後で、これが約400Mバイト残っているはずであることがわかった。私はDataFrameを作成し、それを同じ関数の中にコピーを作成します。この関数は何度も評価されます。機能が評価されるたびに、メモリが増加 - 以下のこの例では、337メガビット:パンダのデータフレームメモリの問題
この上のどのタッチさまざまなスレッドがありますが、まともな解決策がないimport pandas as pd
import numpy as np
from memory_profiler import profile
@profile
def loop_df():
for _ in xrange(100):
copy_df()
# Create a df and then copy it
def copy_df():
X = pd.DataFrame(np.random.rand(100000,10))
X2 = X.loc[0:1000,:]
return
loop_df()
# Returns the following memory usage:
#Line # Mem usage Increment Line Contents
#================================================
# 13 100.3 MiB 0.0 MiB @profile
# 14 def loop_df():
# 15 437.8 MiB 337.5 MiB for _ in xrange(100):
# 16 437.8 MiB 0.0 MiB copy_df()
:Memory leak using pandas dataframe、https://github.com/pandas-dev/pandas/issues/6046、https://github.com/pandas-dev/pandas/issues/2659は、Pandas: where's the memory leak here?
これを避けるためにできることについてのアドバイスは大歓迎です。これまでのところ、ガベージコレクタを使用して単純な例で作業しましたが、複雑なコードでは失敗します。マルチプロセッシングプールを使用することは、私の複雑なコードでもうまくいきました。しかし、マルチプロセッシングモデルの使用を必要としないソリューションがあれば良いでしょう。
Numpyの配列やリストなどのPythonオブジェクトがこのような動作をしないときに、なぜこれが起こっているのか説明できますか?これはバグやDataFrameオブジェクトの意図した動作ですか? gc.collect()
続いdel
を使用して