【Python】pickle.load() と pandas.read_csv() の速度比較
Pythonでデータを保存・読み込みする際に、pickleモジュールとpandas.read_csv()のどちらを使うべきか迷うことがあります。そこでこの2つの速度を比較してみました。
速度の傾向
pickle.load()
バイナリ形式のデータをそのまま復元するため、読み込みが高速です。特にDataFrameの型情報やインデックス情報をそのまま保持している点で有利です。
pandas.read_csv()
テキスト形式のCSVファイルを解析しながらデータをロードするため、pickleに比べると遅くなる傾向があります。データ量が増えるとその差が顕著になります。
実際の速度を測定してみる
以下のコードを使って、2つの方法の速度を比較しました。
import pandas as pd import pickle import time # サンプルデータの作成 data = {"Column1": range(1000000), "Column2": range(1000000, 2000000)} df = pd.DataFrame(data) # ファイルに保存 csv_file = "data.csv" pickle_file = "data.pkl" df.to_csv(csv_file, index=False) with open(pickle_file, "wb") as file: pickle.dump(df, file) # pandas.read_csv()の速度測定 start_time = time.time() csv_df = pd.read_csv(csv_file) csv_time = time.time() - start_time print(f"CSV読み込み時間: {csv_time:.4f}秒") # pickle.load()の速度測定 start_time = time.time() with open(pickle_file, "rb") as file: pickle_df = pickle.load(file) pickle_time = time.time() - start_time print(f"Pickle読み込み時間: {pickle_time:.4f}秒")
実行結果は以下の通りPickleの方が43倍も速い結果となりました。
CSV読み込み時間: 0.1184秒 Pickle読み込み時間: 0.0027秒
pickle.load() の特徴とメリット
- 高速性: バイナリ形式で保存されているため、データの復元が非常に高速。
- 情報保持: DataFrameの型情報やインデックス情報をそのまま保存・復元可能。
欠点は、pickleファイルはPython固有の形式であるため他のプログラムや言語で読み込むことができません。
pandas.read_csv() の特徴とメリット
- 汎用性: CSVはテキスト形式のため、Python以外の言語やツールでも簡単に利用可能。
- 保存サイズ: バイナリ形式に比べてファイルサイズが小さくなる場合があります。
欠点は、読み込み時にデータ解析や型推測が行われるためpickleに比べて速度は遅くなりがちです。
結論と使い分け
- 高速性が重要: pickle.load() を使用。
- 互換性が重要: pandas.read_csv() を選択。
例えば、同じPython環境でデータを短期間保存・復元する場合はpickleが適しています。一方でデータを他のツールと共有する場合や長期保存する場合はCSVの方が便利です。必要に応じて、ParquetやFeatherなどの形式も検討すると良いでしょう。
スポンサーリンク