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爆速講座