【问题标题】:Pandas Input/output error?熊猫输入/输出错误?
【发布时间】:2026-02-08 20:50:01
【问题描述】:

我创建了一个多索引 .h5 文件并使用 HDFStore 来存储数据。但是,当我尝试从文件中读取数据帧时,事实证明我可以成功读取一些数据帧,但无法读取其他几个数据帧。以下是我得到的错误信息:

HDF5-DIAG:在 HDF5 (1.8.9) 线程 0 中检测到错误: #000:H5Dread() 中的 H5Dio.c 第 174 行:无法读取数据 专业:数据集 次要:读取失败

#001: H5Dio.c 在 H5D_read() 中的第 449 行:无法读取数据 专业:数据集 次要:读取失败

#002: H5D_contig_read() 中的 H5Dcontig.c 第 560 行:连续读取失败 专业:数据集 次要:读取失败

#003: H5D_select_read() 中的 H5Dselect.c 第 275 行:读取错误 专业:数据空间 次要:读取失败

#004: H5D_select_io() 中的 H5Dselect.c 第 210 行:读取错误 专业:数据空间 次要:读取失败

#005: H5D_contig_readvv() 中的 H5Dcontig.c 第 890 行:无法执行矢量化筛缓冲区读取 专业:数据集 次要:无法对对象进行操作

#006: H5V_opvv() 中的 H5V.c 第 1457 行:无法执行操作 主要:内部错误(过于具体,无法详细记录) 次要:无法对对象进行操作

#007:H5D_contig_readvv_sieve_cb() 中的 H5Dcontig.c 第 691 行:块读取失败 专业:数据集 次要:读取失败

#008: H5F_block_read() 中的 H5Fio.c 第 113 行:读取元数据累加器失败 专业:低级I/O 次要:读取失败

#009: H5F_accum_read() 中的 H5Faccum.c 第 254 行:驱动程序读取请求失败 专业:低级I/O 次要:读取失败

#010: H5FD_read() 中的 H5FDint.c 第 142 行:驱动程序读取请求失败 专业:虚拟文件层 次要:读取失败

#011:H5FD_sec2_read() 中的 H5FDsec2.c 第 753 行:文件读取失败:时间 = 2013 年 7 月 3 日星期三 14:07:31

,文件名 = 'N.h5',文件描述符 = 3,errno = 5,错误消息 = '输入/输出错误',buf = 0x7f8807fccb6c,大小 = 649492,偏移量 = 185876480

major: Low-level I/O

minor: Read failed

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在

文件“/usr/share/python27/lib/python2.7/site-packages/pandas/io/pytables.py”,第 165 行,在 getitem

return self.get(key)

文件“/usr/share/python27/lib/python2.7/site-packages/pandas/io/pytables.py”,第 261 行,在获取中

return self._read_group(group)

文件“/usr/share/python27/lib/python2.7/site-packages/pandas/io/pytables.py”,第 651 行,在 _read_group 返回处理程序(组,在哪里)

文件“/usr/share/python27/lib/python2.7/site-packages/pandas/io/pytables.py”,第 400 行,在 _read_frame 返回 DataFrame(self._read_block_manager(group))

文件“/usr/share/python27/lib/python2.7/site-packages/pandas/io/pytables.py”,第 426 行,在 _read_block_manager ax = self._read_index(group, 'axis%d' % i)

文件“/usr/share/python27/lib/python2.7/site-packages/pandas/io/pytables.py”,第 487 行,在 _read_index _, index = self._read_index_node(getattr(group, key))

文件“/usr/share/python27/lib/python2.7/site-packages/pandas/io/pytables.py”,第 532 行,在 _read_index_node 数据=节点[:]

文件“/usr/share/python27/lib/python2.7/site-packages/tables/array.py”,第 684 行,在 getitem 中 arr = self._readSlice(startl, stopl, stepl, shape)

文件“/usr/share/python27/lib/python2.7/site-packages/tables/array.py”,第 781 行,在 _readSlice self._g_readSlice(startl, stopl, stepl, nparr)

文件“hdf5Extension.pyx”,第 1092 行,在 tables.hdf5Extension.Array._g_readSlice (tables/hdf5Extension.c:9570) tables.exceptions.HDF5ExtError:读取数组数据时出现问题。

谁能帮助解决这个问题?非常感谢。

【问题讨论】:

  • 请展示一些您用来生成 HDFStore 的完整代码

标签: pandas


【解决方案1】:

HDF5 文件已损坏。您可以通过执行写入来实现这一点,然后在中间中断它(ctrl-c)。您将无法恢复。 HDF5 以块的形式写入,如果块被中断,我认为状态不一致。

如果您正在执行并发写入(线程或进程),您也会受到损坏。看到这个:http://pandas.pydata.org/pandas-docs/dev/io.html#notes-caveats

【讨论】:

  • 谢谢杰夫。我所做的是使用 HDFStore 打开一个 HDF5 文件并将一个数据帧写入文件,关闭它并循环这个过程。我想知道这是否会损坏文件?另一个是我使用多个处理器,但我确实使用每个处理器写入不同的 HDF5 文件。非常感谢您的回复。
  • 不同处理器对不同文件应该没问题
  • 在单个文件上也应该没问题;写一次,确保没问题,看看哪里出错了
  • 感谢您的建议。顺便说一句,奇怪的是即使生成两个具有完全相同数据的文件,错误块也会出现在不同的地方。
  • 如果我可以发布您的代码或数据链接(如果您愿意,请私信发送)- 我可以看看
【解决方案2】:

嗯,听起来 HDF5 库可能无法在启用线程安全配置选项(--enable-threadsafe)的情况下编译。此外,如果您从不同的进程同时写入同一个文件,这将不起作用 - 您需要关闭该文件并从另一个进程重新打开它。

在此处查看 HDF5 常见问题解答: http://www.hdfgroup.org/hdf5-quest.html#gconc

【讨论】: