加载csv并在Python中保存HDF5

时间:2014-08-20 12:20:36

标签: python numpy hdf5 pytables h5py

我正在尝试从文本文件导入数据(三列浮点数,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

1 个答案:

答案 0 :(得分:3)

为了快速获胜 - 您可以将数据保存为数组(我猜它是 - 因为数据只是1D):

a = h5.create_array(gp3,"c3",data,'my data')

请记住关闭文件:

h5.close()

结果:

array result

如果你真的想把它保存为一个表格,你基本上必须记住,表格需要首先定义(就其记录结构而言),然后分配和刷新它们的值。 / 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()

结果:

table

最后,我个人实际上将Pandas用于此CSV到HDF5的内容 - 更容易操作DataFrames和系列...