HDF5

分层数据格式(Hierarchical Data Format)是一种二进制、自描述格式,支持规则步长和随机访问。Python 中有三种主要选项与 HDF5 交互:

  • h5py - 对 HDF5 库的无偏见反映
  • pytables - 一个有偏见的版本,增加了额外的功能和约定
  • pandas.HDFStore - Pandas 用户中常用的格式。

所有这些库都能创建和读取 HDF5 文件。不幸的是,其中一些库有特殊的约定,只能被其自身的库理解。因此,由这些库创建的某些 HDF5 文件可能不被其他库很好地理解。

协议

如果给定一个显式对象(而非字符串 URI),例如 h5py.Datasetpytables.Tablepandas.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