HDF5
是⼀种存储⼤规模科学数组数据的⾮常好的⽂件格式。它
可以被作为
C
库,带有许多语⾔的接⼝,如
Java
、
Python
和
MATLAB
等。
HDF5
中的
HDF
指的是层次型数据格式
(
hierarchical data format
)。每个
HDF5
⽂件都含有⼀个⽂件系
统式的节点结构,它使你能够存储多个数据集并⽀持元数据。与
其他简单格式相⽐,
HDF5
⽀持多种压缩器的即时压缩,还能更
⾼效地存储重复模式数据。对于那些⾮常⼤的⽆法直接放⼊内存
的数据集,
HDF5
就是不错的选择,因为它可以⾼效地分块读
写。
虽然可以⽤
PyTables
或
h5py
库直接访问
HDF5
⽂件,
pandas
提供
了更为⾼级的接⼝,可以简化存储
Series
和
DataFrame
对象。
HDFStore
类可以像字典⼀样,处理低级的细节:
In [92]: frame = pd.DataFrame({'a': np.random.randn(100)})
In [93]: store = pd.HDFStore('mydata.h5')
In [94]: store['obj1'] = frame
In [95]: store['obj1_col'] = frame['a']
In [96]: store
Out[96]:
<class 'pandas.io.pytables.HDFStore'>
File path: mydata.h5
/obj1 frame (shape->[100,1])
/obj1_col series (shape->[100])
/obj2 frame_table (typ->appendable,nrows->100,ncols->1,indexers->
248
[index])
/obj3 frame_table (typ->appendable,nrows->100,ncols->1,indexers->
[index])
HDF5
⽂件中的对象可以通过与字典⼀样的
API
进⾏获取:
mport numpy as np frame=pd.DataFrame({'a': np.random.randn(100)}) # print(frame) store = pd.HDFStore('mydate.h5') store['obj1']=frame store['obj1_col'] = frame['a'] print(store) print(store['obj1']) print(store['obj1_col'])
HDFStore支持俩种存储模式,‘fixed’和‘table’,后者速度更慢,但支持一种特殊语法的查询操作
store.put('obj2',frame,format='table')
store.select('obj2',where=['index >= 10 and index<=15']
frame.to_hdf('mydata.h5', 'obj3', format='table')
pd.read_hdf('mydata.h5', 'obj3', where=['index <5'])