BlogiMind開発者ブログ2019-04-12pandasのファイル出力形式まとめpython概要pandasにはcsvやpickle、parquetなど様々な形式でのデータ出力が用意されている。各出力形式で実際にデータを出力して結果や実行時間を確認してみる。実行時間はipython上で%%timeを用いて計測。小数点以下はround。記事の最後に実行時間と出力サイズを一覧でまとめています。3.7.2pandas==0.24.1pandasは古いバージョンだと一部フォーマットに対応していないことがあります。pandasはどんどん便利になっていく。下記の形式などが用意されている。100文字の文字列のカラムを1つ、計6つのカラムを持つDataFrameを作る。write時の実行時間の差も計測したいので1000万行で生成してみる。この処理は数分かかります。EkXmmrTPvoZm...ランダム文字列なので圧縮はちょっと効きづらいと思われる。後から思ったのだけどもっと圧縮効率高そうなデータにした方が良かった気がする。GB容量は1.8GB。to_csvto_csvでCSVファイルを出力する。180秒データサイズが大きくなるとto_csvでは辛くなってくる。to_pickleto_pickleで保存する。gzipコマンドの方がだいぶ速い平文なら高速。to_parquetparquet。列指向はPandasとは相性が良いはず。事前にpyarrowとzstd圧縮を使う場合はzstandardを入れる。速くて圧縮効率も良いparquet優秀。依存ライブラリが多かったり大容量のファイルを扱う際にpyarrowでエラーが出てfastparquetに切り替えたり等、少し癖がある。to_hdfHDF形式での出力。事前にhdf5とpytablesを入れておく。pytablesmodeはデフォルトがappendになっているのでwriteにしておく。速いしappendもできるし何かと使い勝手がいい。to_sqlRDBに保存する。SQLiteに入れてみる。PostgreSQLとMySQLはdockerのlatestをデフォルトのまま利用し特にチューニングはしていない。データサイズは未計測sqliteはCSV出力より少し多い程度のデータサイズで実行時間も短いので、多少大きいデータでも要件によっては十分実用に耐えうるかもしれない。to_excel全件で実行しようとしたらメモリ20GB以上喰ってうちのPCでは動かなかったので1/10で実行。実行時間は176秒なので線形に増えると仮定して1760秒とする。to_jsonJSON出力。311秒to_htmlto_htmlは出力する前にすべてメモリに溜め込むようでメモリを15GBほど消費していた。998秒1000万レコードのHTMLなんて誰も使わないと思うけどメモリが足りれば一応動くことは動く。to_featherfeather形式。カラムナでArrowなのでparquetに近い。4秒to_latexlatex。to_htmlと同じくメモリに一時的にデータを乗せるのでメモリ使用量は10GBを超える。172秒to_statastata。24秒to_msgpackMessagePack。(1)リンク株式会社iMindスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。