HDF5¶
分层数据格式(Hierarchical Data Format)是一种二进制、自描述格式,支持规则步长和随机访问。Python 中有三种主要选项与 HDF5 交互:
- h5py - 对 HDF5 库的无偏见反映
- pytables - 一个有偏见的版本,增加了额外的功能和约定
- pandas.HDFStore - Pandas 用户中常用的格式。
所有这些库都能创建和读取 HDF5 文件。不幸的是,其中一些库有特殊的约定,只能被其自身的库理解。因此,由这些库创建的某些 HDF5 文件可能不被其他库很好地理解。
协议¶
如果给定一个显式对象(而非字符串 URI),例如 h5py.Dataset、pytables.Table 或 pandas.HDFStore,那么 odo 项目可以智能地决定如何处理。如果给定一个字符串,例如 myfile.hdf5::/data/path,那么 odo 默认使用普通的 h5py 解决方案,这是三者中最不偏见的。
您可以使用以下协议之一指定所需的特定格式:
h5py://pytables://hdfstore://
限制¶
每个库都有其局限性。
- H5Py 不支持日期时间(datetimes)
- PyTables 不支持可变长度字符串,
- Pandas 不支持非表格数据(例如
ndarrays),并且如果用户不选择format='table'关键字参数,它创建的 HDF5 文件可能不被其他库很好地理解。
我们对 PyTables 的支持确实比较薄弱。欢迎在此处贡献。
URI¶
HDF5 数据集的 URI 包括文件名和该文件中的数据路径。它还可以选择包含一个协议。
HDF5 URI 示例
myfile.hdf5::/data/path
hdfstore://myfile.h5::/data/path
转换¶
HDF5 文件的默认输入和输出路径包括 Pandas DataFrames 序列和 NumPy ndarrays 序列。
h5py.Dataset <-> chunks(np.ndarray)
tables.Table <-> chunks(pd.DataFrame)
pandas.AppendableFrameTable <-> chunks(pd.DataFrame)
pandas.FrameFixed <-> DataFrame