尝试保存 hdf5 行时出错,其中一列是字符串,另一列是浮点数数组

Error when trying to save hdf5 row where one column is a string and the other is an array of floats

我有两列,一列是字符串,另一列是浮点数数组

a = 'this is string'

b = np.array([-2.355,  1.957,  1.266, -6.913])

我想将它们作为单独的列存储在一个 hdf5 文件中。为此,我正在使用 pandas

hdf_key = 'hdf_key'
store5 = pd.HDFStore('file.h5')

z = pd.DataFrame(
{
 'string': [a],
 'array': [b]
})
store5.append(hdf_key, z, index=False)
store5.close()

但是,我得到这个错误

TypeError: Cannot serialize the column [array] because
its data contents are [mixed] object dtype

有没有办法将其存储到h5?如果是这样,如何?如果不是,那么存储此类数据的最佳方式是什么?

我无法在 pandas 方面为您提供帮助,但可以向您展示如何使用 pytables 进行此操作。 基本上你创建一个 table 引用一个 numpy recarray 或一个定义混合数据类型的数据类型。

下面是一个超级简单的示例,展示了如何使用 1 个字符串和 4 个浮点数创建 table。然后它将数据行添加到 table。 它显示了 2 种不同的添加数据的方法:
1. 元组列表(每行 1 个元组)- 参见 append_list
2. numpy recarray(dtype 匹配 table 定义)- 在 for 循环

中查看 simple_recarr

要获取 create_table() 的其余参数,请阅读 Pytables 文档。这非常有帮助,应该可以回答其他问题。 Link 下面:
Pytables Users's Guide

import tables as tb
import numpy as np

with tb.open_file('SO_55943319.h5', 'w') as h5f:

    my_dtype = np.dtype([('A','S16'),('b',float),('c',float),('d',float),('e',float)])
    dset = h5f.create_table(h5f.root, 'table_data', description=my_dtype)

# Append one row using a list:
    append_list = [('test string', -2.355, 1.957, 1.266, -6.913)]
    dset.append(append_list)

    simple_recarr = np.recarray((1,),dtype=my_dtype)

    for i in range(5):

        simple_recarr['A']='string_' + str(i)
        simple_recarr['b']=2.0*i
        simple_recarr['c']=3.0*i
        simple_recarr['d']=4.0*i
        simple_recarr['e']=5.0*i

        dset.append(simple_recarr)

print ('done')