【问题标题】:Custom column names in HDF5 file using h5py使用 h5py 在 HDF5 文件中自定义列名
【发布时间】:2020-06-12 13:22:55
【问题描述】:

我有以下代码sn-p:

import h5py
import numpy

## Data set with shape (5, 5) and numpy array containing column names as string
data = numpy.random.random((5, 5))
column_names = numpy.array(["a", "b", "c", "d", "e"])

## Create file pointer
fp = h5py.File("data_set.HDF5", "w")

## Store data
fp["sub"] = data

## Close file
fp.close()

如何为HDF5 file 中的列添加名称,如附图中的箭头所示?

【问题讨论】:

  • 你试过使用属性attrs 吗?
  • 我认为link 可能会有所帮助。
  • @AnuragReddy 正确的语法是什么?我试过:fp.attrs["FIELD_MANY"] = column_namesfp.attrs["column_name"] = column_namesfp.attrs["column_1_name"] = "a"。但是,这不会产生预期的结果。
  • h5py 使用 numpy 数组,而不是 tables。这些数组不使用自定义行或列标签。 numpy 结构化数组使用字段名称,但我不确定您是否想更改数组只是为了获取名称。 pandas 使用 pytables 与 HDF5 交互。您可以尝试将数组加载到数据框中并保存。

标签: python numpy concatenation hdf5 h5py


【解决方案1】:

诀窍是使用 Numpy dtype 来定义字段/列名称,然后使用它来定义记录数组。您还可以混合变量类型(例如,如果您想在同一行混合整数、浮点数和字符串)。

下面的修改示例:

import h5py
import numpy as np

## Data set with shape (5, 5) and list containing column names as string
data = np.random.rand(5, 5)
col_names = ["a", "b", "c", "d", "e"]
## Create file pointer
with h5py.File("data_set_2.HDF5", "w") as fp :
    ds_dt = np.dtype( { 'names':col_names,
                        'formats':[ (float), (float), (float), (float), (float)] } )
    rec_arr = np.rec.array(data,dtype=ds_dt)        
    ## Store data
    ##fp["sub"] = data
    ds1 = fp.create_dataset('sub', data=rec_arr )

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 2020-08-19
    • 2015-09-17
    • 2014-12-24
    • 2017-04-23
    • 2015-04-09
    • 2022-10-19
    • 2012-05-03
    • 2016-03-29
    相关资源
    最近更新 更多