我正在将高维数据集(90 * 80000)加载到分块的pandas数据帧中。使用HDF5store我想将此数据集写入.hdf5。 我正在将数据集划分为矩阵 90 * 6 和 90 *剩余列。
我正在使用食谱中概述的方法,并尝试了我发现分散在互联网上的不同解决方案 - 无济于事。我认为问题可能是,第二个分区的标题太大(考虑到64kb的限制)。但是,我认为我只将矩阵,而不是整个数据帧传递给.append
命令。
这是我的代码:
i=0
reader = pd.read_csv(dataFile, delim_whitespace=True, chunksize=10, names=header, skiprows=1)
for chunk in reader:
# if i==0:
# print chunk.ix[:,6:].values
# store['df'] = chunk.ix[:,6:]
# print type(store['df'])
# print store['df'].shape
# else:
# store.append('df', pd.DataFrame(chunk.ix[:,6:]))
# print store['df'].shape
store.append('a',chunk.ix[:,6:])
store.append('ID', chunk.ix[:,:6]) #the only command that works
chunk.ix[:,6:].to_hdf(store, 'df', format="table", append=True)
store.append('df', chunk.ix[:,6:].values)
i+=1
这些是我单独尝试过的一系列选项,除了小数据小节外,它们都没有工作。注释版本将第一个块写入数据集,但随后抱怨它只能附加到表中。
一般错误消息:
回溯(最近一次调用最后一次):文件" D:/ OneDrive / Research / 2016研究项目/ python文件/ rawToHdf5TutChunked.py",109行, store.append(' a',chunk.ix [:,6:])文件" C:\ Python27 \ lib \ site-packages \ pandas \ io \ pytables.py", 919行 附加 ** kwargs)文件" C:\ Python27 \ lib \ site-packages \ pandas \ io \ pytables.py",第1264行,in _write_to_group s.write(obj = value,append = append,complib = complib,** kwargs)File" C:\ Python27 \ lib \ site-packages \ pandas \ io \ pytables.py",第3801行, 在写 self.set_attrs()File" C:\ Python27 \ lib \ site-packages \ pandas \ io \ pytables.py",第3052行,in set_attrs self.attrs.non_index_axes = self.non_index_axes文件" C:\ Python27 \ lib \ site-packages \ tables \ attributeset.py",第461行,in 的 SETATTR self._g__setattr(name,value)File" C:\ Python27 \ lib \ site-packages \ tables \ attributeset.py",403行in _g__setattr self._g_setattr(self._v_node,name,stvalue)File" tables \ hdf5extension.pyx",line 715,in tables.hdf5extension.AttributeSet._g_setattr (tables \ hdf5extension.c:7315)tables.exceptions.HDF5ExtError:HDF5 错误回溯
文件" J:\ dev \ src \ hdf5_1_8_cmake \ src \ H5A.c",第259行,在H5Acreate2中 无法在H5A_create中创建属性文件" J:\ dev \ src \ hdf5_1_8_cmake \ src \ H5Aint.c",第275行 无法在对象标题文件" J:\ dev \ src \ hdf5_1_8_cmake \ src \ H5Oattribute.c",第347行,in中创建属性 H5O_attr_create 无法在标题文件" J:\ dev \ src \ hdf5_1_8_cmake \ src \ H5Omessage.c",第224行中创建新属性 H5O_msg_append_real 无法创建新消息文件" J:\ dev \ src \ hdf5_1_8_cmake \ src \ H5Omessage.c",1945行,in H5O_msg_alloc 无法为 H5O_alloc中的消息文件" J:\ dev \ src \ hdf5_1_8_cmake \ src \ H5Oalloc.c",第1142行分配空间 对象标题消息太大
HDF5错误返回跟踪结束
无法设置属性' non_index_axes'在节点中:/ a(组)''。闭幕 剩下的打开文件:t.hdf5 ...已完成
我不习惯使用大型数据集,因此可以欣赏任何输入。
答案 0 :(得分:0)
这是一种现在很好用的解决方法。不过,我放弃了使用HDF5Store。 基本上我是使用h5py创建数据集并对其进行全面分配,然后修剪空行:
reader = pd.read_csv(datafile, delim_whitespace=True, chunksize=args.chunksize, names=header, skiprows=1)
max_rows_est = 880000 #estimate for maximum number of rows per file
i=0 #counter for no of iterations through loop
n_rows=0 #counter of no of processed rows
for chunk in reader:
big_chunk_shape = chunk.ix[:,6:].shape
if i == 0:
print 'creating dataset {0}'.format(j+1)
dset2_data = f_hdf5.create_dataset('{0}'.format(j+1), (max_rows_est, big_chunk_shape[1]), maxshape=(None, big_chunk_shape[1]), dtype='<i4')
dset2_data[i*big_chunk_shape[0]:(i+1)*big_chunk_shape[0], :] = chunk.ix[:,6:].values
n_rows += big_chunk_shape[0]
i+=1
dset2_data.resize((n_rows, big_chunk_shape[1]))