是否可以从 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
。
列名有V2pt
、R2pt
等。
我可以读取整个数组作为数据,我可以读取一个元素
res[0,...,"V2pt"].
这将返回V2pt
列第一行的数字。将0
替换为1
将返回第二行值,以此类推。
如果我知道列名先验,那就可以了。但我没有。
我只想获取整个数据集和它的列名。我该怎么做?
我看到 HDF5 文档的 HDF5 documentation 中有一个 get_field_info
函数,但我发现 h5py 中没有这个函数。
我搞砸了吗?
将这个表作为 pandas DataFrame 读取的解决方案会更好......
【问题讨论】:
【参考方案1】:这在 h5py 中很容易做到,并且就像 Numpy 中的复合类型一样工作。
如果res
是您的数据集的句柄,res.dtype.fields.keys()
将返回一个
所有字段名称的列表。
如果您需要知道具体的dtype
,res.dtype.fields['V2pt']
之类的就可以了。
【讨论】:
约翰,感谢您的回答。但是,我有两个后续问题。 1.返回的列表与表格的顺序不同。我想这意味着我必须遍历列表并获取每一列而不是 res[...]。 2. 我有另一个表,你的方法只给出了两列,假设第一列是“次要结果”。实际上,该表有更多列,在 HDF5View 中显示为“次要结果->向上->参数 1”。这些似乎是指其他一些表。关于如何获得这些的任何想法??? dtype.fields 返回一个字典对象,这会打乱排序。您可以这样做: dtype.names 将返回字段名称的有序元组。我不是缺少列的情况。它是复合类型的复合类型吗?在这种情况下,您需要一些代码来获取所有字段名称的平面列表。以上是关于是否可以从 Python 的 HDF5 文件中的复合数据集中读取字段名称?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以直接重命名存储在 hdf5 文件中的 pandas 数据框的列?