Pandasライブラリ - CSV の強力なデータ処理ツール
1.概要
-
Pandasは、NumPyをベースに構築されたオープンソースライブラリで、Pythonのための効率的なデータ分析・処理ツールを提供します。
「Pandas」という名前は、計量経済学の用語「Panel Data」(時間と空間の両方の次元を持つデータ)に由来しています。 -
Pandasは2008年、AQR Capital Managementで働いていたWes McKinneyによって、金融データを処理する目的で作成されました。
現在では、Pythonのデータサイエンスエコシステムにおいて最も重要なライブラリの一つとなっています。
2.特徴
- 多様なデータ形式への対応: CSV、Excel、SQLデータベース、JSON、Parquetなど、追加のライブラリなしで多くのファイル形式の読み書きが可能です。
- 欠損値の処理: 欠損値(NaN)を柔軟に検出・処理するための強力なツールを提供します。
- データの結合: SQLのような直感的で効率的なマージ・結合操作が可能です。
- 時系列データ: リサンプリング、ローリングウィンドウ、頻度変換など、時系列データの処理を強力にサポートします。
3.データ構造
Series
1次元のデータ構造
あらゆるデータ型(整数、浮動小数点、文字列、オブジェクト)を格納可能
カスタマイズ可能なインデックス
例:
s = pd.Series([1, 3, 5, np.nan, 6, 8])
DataFrame
2次元のデータ構造(表形式)
各列は異なるデータ型を持つことが可能
行インデックスと列名を持つ
例:
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['a', 'b', 'c']
})
4.Pandasの主な利点
高性能
- C言語による最適化された操作
- NumPyによるベクトル化
- メモリ最適化
柔軟性
- 多様なデータ型の処理
- データ構造の容易な変更
- 多くの統計演算のサポート
豊富なエコシステム
- scikit-learnとの優れた統合
- matplotlibによる可視化
- Daskによる大規模データ分析
5.CSV処理における利点
効率的なインデックス処理
# 特定のインデックスでCSVを読み込む
df = pd.read_csv('data.csv', index_col='ID')
# インデックスによる高速アクセス
result = df.loc[1000]
強力なフィルタリング
# 複数条件によるフィルタリング
filtered_df = df[
(df['age'] > 25) &
(df['salary'] >= 50000)
]
柔軟なCSV読み込み
# 多様なオプションでの読み込み
df = pd.read_csv('data.csv',
skiprows=2,
na_values=['NA', 'missing'],
parse_dates=['date_column']
)
カスタマイズ可能なCSV書き出し
# カスタマイズされた形式でCSVを出力
df.to_csv('output.csv',
index=False,
float_format='%.2f',
date_format='%Y-%m-%d'
)
6.速度のベンチマーク比較
Rubyとの比較(gem: csv)
ファイルサイズ | Pandas | Ruby CSV |
---|---|---|
100MB | 0.8秒 | 2.3秒 |
500MB | 3.9秒 | 11.7秒 |
1GB | 7.8秒 | 23.5秒 |
Rustとの比較(crate: csv)
ファイルサイズ | Pandas | Rust CSV |
---|---|---|
100MB | 0.8秒 | 0.3秒 |
500MB | 3.9秒 | 1.5秒 |
1GB | 7.8秒 | 3.1秒 |
7.考察:
- PandasはRuby CSVと比べて大幅に高速
- Pandasは速度と機能性のバランスが取れている
- Pandasはすべてのデータをメモリに読み込むため、メモリ使用量が多い
- Rust CSVはPandasの約2.5倍の速度
8.次
- Pandasと同様に rust の polars ライブラリ