ともにゃん的データ分析ブログ

勉強したことの備忘録とかね

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


特に中間テーブルなどを結合した最終的な結果データフレームだけを使いたい時などは、途中過程で生成されるデータフレームは結局使用されないと思うので、上記のオプションをつけても問題無いと思います。そうでなくても問題ないのかもしれません。