5月28日、The New Stackが「Python Pandas Ditches NumPy for Speedier PyArrow」と題した記事を公開した。この記事では、データ解析ライブラリ Pandas 3.0がデフォルトエンジンをNumPyからPyArrowへ段階的に置き換える方針と、そのパフォーマンス向上の実態について詳しく紹介されている。
以下に、その内容を紹介する。
Pandas 3.0は“列指向”エンジンへ舵を切る
Pandas 2系でもPyArrowはオプションとして利用できたが、3.0では必須依存となり、文字列型の既定もpyarrow.string
に変更される予定だ。NumPyも引き続き利用可能だが、PythonインストラクタのReuven Lerner氏によれば「PyArrowは10倍速い。もう説明は要らないほどだ」と言う。
NumPyの限界
NumPyは2005年に誕生した行指向ライブラリで、
- データストリーミングや複雑なネスト構造への対応が弱い
- 日付型処理が不得手
- 圧縮やバッチ処理の最適化が不足
- 単一スレッド実行でCPUに依存
といった制約を抱える。特に列指向データではキャッシュ効率が悪く、読み取りが遅延する。
PyArrowがもたらす高速化
PyArrowはApache ArrowフォーマットをPythonから扱うバインディングで、列指向ストレージを実現する。これにより
- Copy-on-Write によるメモリ削減と高速化
- Feather(非圧縮)やParquet(圧縮)といったバイナリ形式利用
- Spark、Flink、Rayなど他エンジンとのデータ互換
が可能になる。Lerner氏の検証では、2.2 GBのCSV(1,200万行)の読み込みにPython標準は55.8 秒を要したが、PyArrowでは11.8 秒に短縮。さらにFeather形式では10.6 秒、Parquet形式では9.1 秒にまで短縮された。
リリース時期と今後
現時点でPandas 3.0の正式なリリース日は未定である。Lerner氏は「バックエンドをPyArrowに置き換えるのはまだ実験段階だが、明らかに正しい方向に進んでいる」と述べる。完全移行の時期も未確定だが、既存APIは維持されるため、ユーザーはコストを払わずに高速化の恩恵を享受できる見込みだ。
詳細はPython Pandas Ditches NumPy for Speedier PyArrowを参照していただきたい。