CSV はテキストベースのフォーマットなので、ファイルサイズが大きくなりがちで、読み書きの速度も遅くなります。Parquet(パーケット)は列指向のバイナリ形式で、圧縮効率と読み込み速度に優れたフォーマットです。pandas は Parquet の読み書きを標準でサポートしています。
Parquet で保存する
DataFrame を Parquet 形式で保存するには to_parquet を使います。
import pandas as pd df = pd.DataFrame({ "name": ["Alice", "Bob", "Charlie"] * 10000, "age": [25, 30, 35] * 10000, "score": [88.5, 92.0, 76.3] * 10000 }) df.to_parquet("data.parquet")
Parquet はデフォルトで snappy 圧縮が適用されるため、CSV と比べてファイルサイズが大幅に小さくなります。同じデータを CSV で保存した場合と比較すると、サイズが数分の一になることも珍しくありません。
Parquet を読み込む
読み込みは read_parquet を使います。
df = pd.read_parquet("data.parquet") print(df.shape)
CSV と異なり、列の型情報がファイルに埋め込まれているため、読み込み後に型変換を行う必要がありません。int は int、float は float、文字列は文字列としてそのまま復元されます。
テキスト形式で人間が読める。型情報を持たないため、読み込み時に型推定が必要
バイナリ形式で高速・コンパクト。型情報を保持するため、読み込み時に型のずれが起きない
特定の列だけ読み込む
Parquet は列指向フォーマットなので、特定の列だけを効率的に読み込めます。
df = pd.read_parquet("data.parquet", columns=["name", "score"])
CSV では全列を読み込んでからフィルタリングする必要がありますが、Parquet なら不要な列はディスクから読み出されません。列数が多いデータほど効果が大きくなります。
エンジンの選択
pandas は pyarrow と fastparquet の 2 つのエンジンをサポートしています。
| pyarrow | 高速で多機能。デフォルトのエンジン |
| fastparquet | 軽量で依存が少ない |
df.to_parquet("data.parquet", engine="pyarrow") df = pd.read_parquet("data.parquet", engine="pyarrow")
特にこだわりがなければ pyarrow を使っておけば問題ありません。pip install pyarrow でインストールできます。
圧縮方式を変える
デフォルトの snappy 圧縮のほか、gzip や brotli なども選べます。
df.to_parquet("data_gzip.parquet", compression="gzip") df.to_parquet("data_none.parquet", compression=None)
gzip は snappy よりも圧縮率が高いかわりに、圧縮・展開に時間がかかります。読み書きの速度を優先するなら snappy、ファイルサイズを最小にしたいなら gzip が適しています。
データの分析ワークフローにおいて、CSV は外部とのやり取りに使い、中間データや内部保存には Parquet を使うという使い分けがおすすめです。特に繰り返し読み込むデータは Parquet に変換しておくだけで、作業効率が大きく向上します。