我有一个HDF5文件,我只是试图以块的形式读取数据并输出到mySQL表。
使用pandas v.0.12.0 代码看起来像,
iter = store.select('data',iterator=True, chunksize=5000)
for data in iter:
# write the data out
但我得到一个例外:
for data in iter:
File "d:\python27\lib\site-packages\pandas\io\pytables.py", line 969, in __iter__
v = self.func(current, stop)
File "d:\python27\lib\site-packages\pandas\io\pytables.py", line 451, in func
return s.read(where=where, start=_start, stop=_stop, columns=columns, **kwargs)
File "d:\python27\lib\site-packages\pandas\io\pytables.py", line 3175, in read
mgr = BlockManager([block], [cols_, index_])
File "d:\python27\lib\site-packages\pandas\core\internals.py", line 1001, in __init__
self._verify_integrity()
File "d:\python27\lib\site-packages\pandas\core\internals.py", line 1239, in _verify_integrity
construction_error(tot_items,block.values.shape[1:],self.axes)
File "d:\python27\lib\site-packages\pandas\core\internals.py", line 2216, in construction_error
tuple(map(int, [len(ax) for ax in axes]))))
ValueError: Shape of passed values is (1, 5000), indices imply (1, 3751044)
我不明白错误试图说的是什么,ValueError:传递值的形状是(1,5000),索引暗示(1,3751044)。我不知道如何让它快乐。
我认为chunksize = 5000值会告诉pandas读取5000行块中的数据,但显然它不喜欢进行迭代。 select的正确用法是什么(chunksize = XXXX)?
答案 0 :(得分:1)
我讨厌回答我自己的问题,但是为了帮助其他人可能会遇到同样的问题。
正如Jeff所说,磁盘上的PyTables HDF5文件中没有pandas元数据。所以我做了什么:
h5file = tables.open_file(file, mode="r")
signal_data = h5file.root.signal_data
data_frame = pd.DataFrame.from_records(signal_data)
现在我可以根据需要在Pandas中操作data_frame。
感谢Jeff的帮助。