2023年4月、pandas 2.0.0がリリースされ、データサイエンスコミュニティに大きな注目を集めました。このバージョンは、データ操作の柔軟性と性能向上を目的とした多くの改良を含んでいます。
以下に、pandas 2.0の主な特徴と具体的なコード例を紹介します。
- 性能向上とメモリ効率の改善 pandasはnumpyに基づいて構築されており、大規模データセットの処理においてメモリ制限が課題となっていました。このバージョンでは、Apache Arrowバックエンドが導入され、データ操作の速度とメモリ効率が大幅に向上しました。
import pandas as pd
import timeit
# Apache Arrowを使用しない場合
start_time = timeit.timeit('pd.read_csv("data/hn.csv")', number=1)
print(f"Arrowなし: {start_time}秒")
# Apache Arrowを使用する場合
start_time = timeit.timeit('pd.read_csv("data/hn.csv", engine="pyarrow", dtype_backend="pyarrow")', number=1)
print(f"Arrowあり: {start_time}秒")
この例では、Arrowバックエンドを使用することで、読み込み速度が35倍以上向上しています。
- Arrowデータ型とNumPyインデックス Arrowは、日時、バイナリ、リストなどの多様なデータ型をサポートしています。これにより、NumPyインデックスの柔軟性も向上しました。
# 32ビット整数型を使用
index_32 = pd.Index([1, 2, 3], dtype=np.int32)
print(f"32ビットインデックス: {index_32}")
- 欠損値処理の柔軟性
pandas 2.0では、
numpy_nullableデータ型を使用することで、欠損値を保持しつつデータ型を変更せずに処理できるようになりました。
# 欠損値を含むデータ読み込み
df_null = pd.read_csv("data/hn.csv", dtype_backend="numpy_nullable")
points_null = df_null["Points"]
# 欠損値の設定
points_null.iloc[0] = None
print(f"欠損値保持: {points_null.dtype}")
- コピーオンライト最適化 データフレームやシリーズの操作時にコピーを遅延させる機能が追加され、メモリ効率が向上しました。
# コピーオンライトを無効化
pd.options.mode.copy_on_write = False
df = pd.read_csv("data/hn.csv")
df["Points"][0] = 2000
print(f"無効時: {df.head()}")
- 選択的な依存関係のインストール pipを使用して、必要に応じて特定の依存関係をインストールできるようになりました。
pip install "pandas[postgresql, aws, spss]>=2.0.0"
これらの改良により、pandas 2.0は性能、柔軟性、相互運用性の面で大きな進化を遂げています。