如何为hdf5正确使用Pandas迭代器?

时间:2014-11-28 22:58:04

标签: python pandas

我有一个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)?

1 个答案:

答案 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的帮助。