是否可以从 Python 的 HDF5 文件中的复合数据集中读取字段名称?

Posted

技术标签:

【中文标题】是否可以从 Python 的 HDF5 文件中的复合数据集中读取字段名称?【英文标题】:Is it possible to read field names from a compound Dataset in an HDF5 file in Python? 【发布时间】:2016-09-26 09:50:41 【问题描述】:

我有一个 HDF5 文件,其中包含一个带有列名的二维表。当我掠夺这个名为results 的对象时,它会在 HDFView 中显示。

原来results 是一个“复合数据集”,一个一维数组,其中每个元素都是一行。以下是 HDFView 显示的属性:

我可以得到这个对象的句柄,我们称之为res

列名有V2ptR2pt等。

我可以读取整个数组作为数据,我可以读取一个元素

res[0,...,"V2pt"].

这将返回V2pt 列第一行的数字。将0 替换为1 将返回第二行值,以此类推。

如果我知道列名先验,那就可以了。但我没有。

我只想获取整个数据集它的列名。我该怎么做?

我看到 HDF5 文档的 HDF5 documentation 中有一个 get_field_info 函数,但我发现 h5py 中没有这个函数。

我搞砸了吗?

将这个表作为 pandas DataFrame 读取的解决方案会更好......

【问题讨论】:

【参考方案1】:

这在 h5py 中很容易做到,并且就像 Numpy 中的复合类型一样工作。 如果res 是您的数据集的句柄,res.dtype.fields.keys() 将返回一个 所有字段名称的列表。

如果您需要知道具体的dtyperes.dtype.fields['V2pt'] 之类的就可以了。

【讨论】:

约翰,感谢您的回答。但是,我有两个后续问题。 1.返回的列表与表格的顺序不同。我想这意味着我必须遍历列表并获取每一列而不是 res[...]。 2. 我有另一个表,你的方法只给出了两列,假设第一列是“次要结果”。实际上,该表有更多列,在 HDF5View 中显示为“次要结果->向上->参数 1”。这些似乎是指其他一些表。关于如何获得这些的任何想法??? dtype.fields 返回一个字典对象,这会打乱排序。您可以这样做: dtype.names 将返回字段名称的有序元组。我不是缺少列的情况。它是复合类型的复合类型吗?在这种情况下,您需要一些代码来获取所有字段名称的平面列表。

以上是关于是否可以从 Python 的 HDF5 文件中的复合数据集中读取字段名称?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以直接重命名存储在 hdf5 文件中的 pandas 数据框的列?

如何扩展 h5py 以便我可以访问 hdf5 文件中的数据?

如何从 C++ 中的 hdf5 文件中读取数据块?

在 pandas 中查看 hdf5 文件中的行数

用 Python 编写 HDF5 文件的最快方法?

是否可以使用 python 3 对 h5py 中的键进行切片而不形成列表?