HDF5格式非常適合保存層次化的結(jié)構(gòu)數(shù)據(jù)集合。python下有pytable和h5py兩種接口方式支持存儲(chǔ)HDF5文件,pandas就支持直接讀寫pytable。保存數(shù)據(jù)量不太大(一般控制在2GB以內(nèi))的日線分鐘線數(shù)據(jù)用h5格式還是很方便的。pandas在讀取h5文件時(shí),可以像數(shù)據(jù)庫(kù)一樣進(jìn)行條件檢索。詳細(xì)資料可參考pandas.HDFStore的where參數(shù)。要使column可以在where語(yǔ)句中查詢,保存數(shù)據(jù)文件時(shí)需要增加index或者明確指定data_columns。但是指定過(guò)多的column為data_columns將會(huì)使得
性能下降。
網(wǎng)上搜索后找到了關(guān)于pandas存儲(chǔ)HDF5文件性能優(yōu)化的一些建議,原文在
這里1.不使用index,創(chuàng)建出來(lái)的HDF文件尺寸會(huì)小一些,速度也快一些。
2.通過(guò)store.create_table_index() 創(chuàng)建索引,對(duì)data_columns進(jìn)行篩選時(shí)的速度沒(méi)有什么影響。
3.保存HDF時(shí)使用壓縮選項(xiàng)對(duì)數(shù)據(jù)的讀取速度影響很小,但是壓縮后,文件尺寸會(huì)顯著的變小。
使用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"'])