Pythonのpandasで大きなデータを扱うときにメモリ効率を上げる方法メモ
最近Pythonを使って大きなデータフレームを結合したり、そのデータフレームに対してメソッドを使って処理をしていますが、頻繁に
"Memory Error"
に遭遇しています。そんな中で色々探し回って見つけたTips的なものをメモとして残しておきます。
- pandas.DataFrame.merge をする時に copy=False のオプションをつける
そもそもこのcopyってなんだかよくわからないのですが、使用メモリの挙動を見ている限りは copy=True とするとデータフレームを結合するときにそのcopyを用意して、それを参照している感じがします。copy=Falseで劇的にメモリ効率が良くなった気がします。
ちなみにpandas.DataFrame.mergeよりもpandas.DataFrame.joinの方が結合の効率が良いという報告もあります
参照:
python - Improve Pandas Merge performance - Stack Overflow
- del 変数名 で変数を消して gc.collect() でメモリを開放
参照:
Pythonで少なくメモリを使用する方法 - のんびりしているエンジニアの日記
- メソッドを呼び出すときは inplace=True オプションをつける
参照:
pandas でメモリに乗らない 大容量ファイルを上手に扱う - StatsFragments
特に中間テーブルなどを結合した最終的な結果データフレームだけを使いたい時などは、途中過程で生成されるデータフレームは結局使用されないと思うので、上記のオプションをつけても問題無いと思います。そうでなくても問題ないのかもしれません。