我正在尝试从文本文件导入数据(三列浮点数,65341行,由一个或多个空格分隔),并将其保存到HDF5文件中。我正在尝试将它们保存在一个表中,该表是由文件名定义的三个组的子组。
因此,对于名为'data_a1_b2_c3.dat'的文件,我想在/ data / a1 / b2 / c3(其中c3是表)中使用1x6000数组
我可以创建HDF5文件和组,但创建表是一个问题。
这是我到目前为止所提出的(我遗漏了文件名解析和错误检查;这有效):
import numpy as np
import tables as tb
# load datafile
fname = 'data_a1_b2_c3.dat'
data=np.genfromtxt(fname)
data=data[:,2]
# Open hdf5 file
h5=tb.openFile("h5file.h5",'a')
gp1 = h5.create_group(h5.root,"data")
gp2 = h5.create_group(gp1,"a1")
gp3 = h5.create_group(gp2,"b2")
t = h5.create_table(gp3,"c3",data,'my data')
最后一行抛出如下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/tables/file.py", line 1067, in create_table
chunkshape=chunkshape, byteorder=byteorder)
File "/usr/lib64/python2.7/site-packages/tables/table.py", line 842, in __init__
descr_from_dtype(nparray.dtype)
File "/usr/lib64/python2.7/site-packages/tables/description.py", line 759, in descr_from_dtype
for name in dtype_.names:
TypeError: 'NoneType' object is not iterable
我首先想到的是这与我的数据阵列有关。但是,我是Python新手,SciPi文档站点目前已关闭(任何人都有镜像?!)(http://www.isup.me/http://docs.scipy.org/doc/numpy/)
我的数组的形状看起来很奇怪,但类型看起来很正确。有什么想法吗?
>>> data.shape
(65341,)
>>> data.dtype
dtype('float64')
有关信息,这是我导入的数据文件的前三行(只需要第三列)
0.250000000000000 0.250000000000000 584.469683289793
0.250000000000000 1.00000000000000 840.153369718130
0.250000000000000 2.00000000000000 821.242731813009
答案 0 :(得分:3)
为了快速获胜 - 您可以将数据保存为数组(我猜它是 - 因为数据只是1D):
a = h5.create_array(gp3,"c3",data,'my data')
请记住关闭文件:
h5.close()
结果:
如果你真的想把它保存为一个表格,你基本上必须记住,表格需要首先定义(就其记录结构而言),然后分配和刷新它们的值。 / p>
所以,除了将其添加到开头之外,你正在做什么:
class Data(tb.IsDescription):
value = tb.Float32Col()
然后执行:
t = h5.create_table(gp3,"c3",Data,'my data')
row = t.row
for d in data:
row['value'] = d
row.append()
t.flush()
结果:
最后,我个人实际上将Pandas用于此CSV到HDF5的内容 - 更容易操作DataFrames和系列...