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

标签 python pandas

我有一个 HDF5 文件,我只是想以 block 的形式读取数据并输出到 mySQL 表。

使用 pandas v. 0.12.0 代码看起来像,

iter = store.select('data',iterator=True, chunksize=5000)
for data in iter:
    # write the data out 

但我得到一个异常(exception):

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: Shape of passed values is (1, 5000), indices imply (1, 3751044)。而且我不知道如何让它开心。

我认为 chunksize=5000 值会告诉 pandas 读取 5000 行 block 中的数据,但显然它不喜欢这样进行迭代。 select(chunksize=XXXX) 的正确用法是什么?

最佳答案

我讨厌回答我自己的问题,但为了帮助以后可能遇到同样问题的其他人,我在这里。

正如 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寻求帮助。

关于python - 如何为 hdf5 正确使用 Pandas 迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27196917/

相关文章:

Python Pandas - 使用 .loc 在多列上使用 AND 和 OR 进行选择

python - 在 pandas 组内设置值

python - 如何在 Pandas DataFrame 中获取符合条件的唯一值?

python - 如何在Go上运行python脚本

python - FFT 后的棋盘格图案

python - 何时使用关联、聚合、组合和继承?

python - 使用 .csv 格式的 HDFS 文件创建 Pandas DataFrame

python - TypeError at/app/profile/, 'list' 对象不可调用 handle_pageBegin args=()

python - 如何将新列添加到 CSV 文件行的开头?

python - 如何使用 Python Pandas 处理包含数百万条记录的 DataFrame?