HDF5格式非常适合保存层次化的结构数据集合。python下有pytable和h5py两种接口方式支持存储HDF5文件,pandas就支持直接读写pytable。保存数据量不太大(一般控制在2GB以内)的日线分钟线数据用h5格式还是很方便的。pandas在读取h5文件时,可以像数据库一样进行条件检索。详细资料可参考pandas.HDFStore的where参数。要使column可以在where语句中查询,保存数据文件时需要增加index或者明确指定data_columns。但是指定过多的column为data_columns将会使得
性能下降。
网上搜索后找到了关于pandas存储HDF5文件性能优化的一些建议,原文在
这里1.不使用index,创建出来的HDF文件尺寸会小一些,速度也快一些。
2.通过store.create_table_index() 创建索引,对data_columns进行筛选时的速度没有什么影响。
3.保存HDF时使用压缩选项对数据的读取速度影响很小,但是压缩后,文件尺寸会显著的变小。
使用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"'])