HDF5格式非常適合保存層次化的結(jié)構(gòu)數(shù)據(jù)集合。python下有pytable和h5py兩種接口方式支持存儲HDF5文件,pandas就支持直接讀寫pytable。保存數(shù)據(jù)量不太大(一般控制在2GB以內(nèi))的日線分鐘線數(shù)據(jù)用h5格式還是很方便的。pandas在讀取h5文件時,可以像數(shù)據(jù)庫一樣進(jìn)行條件檢索。詳細(xì)資料可參考pandas.HDFStore的where參數(shù)。要使column可以在where語句中查詢,保存數(shù)據(jù)文件時需要增加index或者明確指定data_columns。但是指定過多的column為data_columns將會使得
性能下降。
網(wǎng)上搜索后找到了關(guān)于pandas存儲HDF5文件性能優(yōu)化的一些建議,原文在
這里1.不使用index,創(chuàng)建出來的HDF文件尺寸會小一些,速度也快一些。
2.通過store.create_table_index() 創(chuàng)建索引,對data_columns進(jìn)行篩選時的速度沒有什么影響。
3.保存HDF時使用壓縮選項對數(shù)據(jù)的讀取速度影響很小,但是壓縮后,文件尺寸會顯著的變小。
使用pandas讀寫hdf5文件示例如下
#write
store=pd.HDFStore("./data/Minutes.h5","a", complevel=9, complib='zlib')
store.put("Year2015", dfMinutes, format="table", append=True, data_columns=['dt','code'])
# read
store=pd.HDFStore("./data/Minutes.h5","r")
store.select("Year2015", where=['dt<Timestamp("2015-01-07")','code=="000570"'])