You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas表格模式创建HDF5文件时出现奇怪的IndexError

使用pandas写入HDF5表格模式时触发IndexError的问题

问题场景

通过store.put()以表格模式写入HDF5文件时出现IndexError,执行代码如下:

storage_file.put(some_name, current_dataset.meta_data, format="table", data_columns=True, min_itemsize={"values": 100})

其中meta_data是一个Pandas DataFrame,列名列表为:

[
    'index',
    'xPosition',
    'yPosition',
    'approachID',
    'segment_0_type',
    'segment_0_style',
    'segment_0_duration',
    'segment_0_num_points',
    'segment_0_z_start',
    'segment_0_z_end',
    'segment_0_setpoint',
    'segment_1_type',
    'segment_1_style',
    'segment_1_duration',
    'segment_1_num_points',
    'segment_1_z_start',
    'segment_1_z_end',
    'segment_1_setpoint',
    'segment_2_type',
    'segment_2_style',
    'segment_2_duration',
    'segment_2_num_points',
    'segment_2_height_limit',
    'pauseBeforeFirst',
    'pauseOnTipsaver',
    'segmentIndex',
    'heightMultiplier',
    'heightOffset',
    'sensitivity',
    'springConstant',
    'measurementID'
]

错误信息

触发的错误提示:

IndexError: tuple index out of range

报错栈指向pandas内部代码:

File "PATH\Lib\site-packages\pandas\io\pytables.py", line 4473, in write_data
    new_shape = (nrows,) + self.dtype[names[nindexes + i]].shape

排查发现

  • 将列名改为["0", "1", ..., "30"]这类纯数字字符串时,错误消失。
  • 列名长度不是问题:曾将每个列名改为25个相同数字组成的长字符串(代码如下),能正常运行:
for index in range(meta_data.shape[1]):    
   meta_data.rename({meta_data.columns[index]: "".join([str(index) for i in range(25)])}, axis=1, inplace=True)

问题原因

这个错误是因为你的DataFrame列名中包含了index,而Pandas在处理HDF5表格模式时,会把名为index的列和DataFrame自身的索引逻辑混淆,导致内部代码在计算列名索引位置时出现逻辑冲突,最终触发IndexError。

Pytables写入表格时会区分DataFrame的索引列与普通数据列,当存在名为index的自定义列时,内部列名解析逻辑会出现混乱,使得names[nindexes + i]的索引值超出列表范围,进而报错。

解决方案

直接将DataFrame中名为index的列重命名为其他非关键字名称即可,比如data_index:

meta_data.rename(columns={'index': 'data_index'}, inplace=True)

修改后再执行store.put()操作即可正常写入HDF5文件。


内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:58:27