[英]Loading csv and saving HDF5 in Python
我正在嘗試從文本文件(三列浮點數,65341行,由一個或多個空格分隔)中導入數據,並將其保存到HDF5文件中。 我試圖將它們保存在一個表中,該表是由文件名定義的三個組的子級。
因此,對於名為“ data_a1_b2_c3.dat”的文件,我想要在/ data / a1 / b2 / c3中使用1x6000數組(其中c3是表)
我可以創建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
為了快速獲勝-您可以將數據保存為數組(我想是的-因為數據只是一維的):
a = h5.create_array(gp3,"c3",data,'my data')
記住也要關閉文件:
h5.close()
結果是:
如果您確實要將其另存為表,則基本上必須記住,首先需要定義表(就其記錄結構而言),然后再分配和刷新它們的值。
因此,除了將其添加到開始之外,您所做的只是:
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的東西-更容易操作DataFrame和Series ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.