PandasでHDF5を使いこなす!pd.read_hdf・df.to_hdfの完全ガイド
HDF5とは?Pandasとの組み合わせで大容量データを効率処理
HDF5(Hierarchical Data Format version 5)は、大容量の科学データを高速で読み書きできるファイル形式です。PandasのDataFrameと組み合わせることで、CSVやExcelファイルよりも格段に高速なデータ処理が可能になります。
HDF5の主なメリット
- 高速読み書き: バイナリ形式でCSVの10倍以上高速
- データ圧縮: ファイルサイズを大幅削減
- 階層構造: 複数のデータセットを1つのファイルに格納
- クロスプラットフォーム: OS間でのデータ互換性
必要なライブラリのインストール
pip install pandas tables
tablesライブラリ(PyTables)がHDF5サポートに必要です。
df.to_hdf()でDataFrameをHDF5に保存
基本的な保存方法
import pandas as pd
# サンプルデータ作成
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['x', 'y', 'z']})
# HDF5ファイルに保存
df.to_hdf('data.h5', key='dataset1', mode='w')
保存オプションの活用
# 圧縮付きで保存
df.to_hdf('data.h5', key='dataset1', mode='w', complevel=9, complib='zlib')
# 追加モードで複数データセット保存
df.to_hdf('data.h5', key='dataset2', mode='a')
pd.read_hdf()でHDF5ファイルを読み込み
基本的な読み込み
# HDF5ファイルから読み込み
df_loaded = pd.read_hdf('data.h5', key='dataset1')
print(df_loaded)
条件指定読み込み
# 大容量データの部分読み込み
df_partial = pd.read_hdf('data.h5', key='dataset1', where='A > 1')
実践的な使用例
大容量時系列データの処理
import pandas as pd
import numpy as np
# 100万行のサンプルデータ作成
dates = pd.date_range('2020-01-01', periods=1000000, freq='T')
data = pd.DataFrame({
'timestamp': dates,
'value': np.random.randn(1000000),
'category': np.random.choice(['A', 'B', 'C'], 1000000)
})
# HDF5に保存(高圧縮)
data.to_hdf('timeseries.h5', key='data', mode='w', complevel=9)
# 特定期間のデータのみ読み込み
subset = pd.read_hdf('timeseries.h5', key='data',
where="timestamp >= '2020-06-01' & timestamp < '2020-07-01'")
複数DataFrameの管理
# 複数のDataFrameを1つのHDF5ファイルに保存
sales_data = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
customer_data = pd.DataFrame({'id': [1, 2], 'name': ['田中', '佐藤']})
sales_data.to_hdf('company.h5', key='sales', mode='w')
customer_data.to_hdf('company.h5', key='customers', mode='a')
# ファイル内のキー一覧確認
with pd.HDFStore('company.h5', 'r') as store:
print(store.keys()) # ['/sales', '/customers']
パフォーマンス比較
ファイルサイズと処理速度
| 形式 | ファイルサイズ | 読み込み時間 | 書き込み時間 |
|---|---|---|---|
| CSV | 100% | 100% | 100% |
| HDF5 | 30-50% | 10-20% | 15-25% |
| Parquet | 25-40% | 12-18% | 20-30% |
実際の性能はデータの性質により変動しますが、HDF5は特に大容量データで威力を発揮します。
トラブルシューティング
よくあるエラーと対処法
# エラー対処例
try:
df = pd.read_hdf('data.h5', key='dataset1')
except FileNotFoundError:
print("ファイルが見つかりません")
except KeyError:
print("指定されたキーが存在しません")
HDFStoreクラスの活用
# より詳細な制御が必要な場合
with pd.HDFStore('data.h5', mode='r') as store:
print(f"ファイル内のデータセット: {list(store.keys())}")
df = store['dataset1']
まとめ
HDF5とPandasの組み合わせは、大容量データ処理において強力なソリューションです。特に以下の場面で効果を発揮します:
- 大容量データ(数GB以上)の定期的な読み書き
- 時系列データの部分的な読み込み
- データ圧縮が重要なプロジェクト
- 複数データセットの一元管理
df.to_hdf()とpd.read_hdf()をマスターして、データ処理を高速化しましょう。
関連キーワード
- HDF5 Python
- Pandas 高速化
- 大容量データ処理
- データフォーマット比較
- PyTables
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座




