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

从多个HDF5文件提取数据合并为Pandas DataFrame报错求助

问题:合并多个HDF5文件数据为Pandas DataFrame时触发TypeError

需要从文件夹中多个HDF5文件提取['H1', 'L1', 'frequency_Hz']列的数据,合并为单个Pandas DataFrame,但执行代码时触发以下错误:

TypeError: Accessing a group is done with bytes or str,  not <class 'slice'>

错误原因

报错行dados = arquivo[key][:]中,arquivo[key]指向的是HDF5文件中的Group(组),而非Dataset(数据集)。HDF5的Group是数据容器,不能直接用切片[:]读取数据,必须访问Group内部的具体Dataset。

从打印信息可见,每个文件的顶级key(比如001121a05)下包含['H1', 'L1', 'frequency_Hz']三个Dataset,这才是需要读取的目标数据。

修复后的代码

import glob
import h5py
import pandas as pd

dfs = []
arquivos_hdf5_treino = glob.glob('../Data/OriginalDatasets/train/*.hdf5')
numArquivo = 1

for arquivo_hdf5 in arquivos_hdf5_treino:
    with h5py.File(arquivo_hdf5, 'r') as arquivo:
        print(f'Arquivo {numArquivo}')
        # 获取文件中的顶级Group(每个文件仅包含一个顶级Group)
        top_group = list(arquivo.keys())[0]
        print(f'Chave em {arquivo_hdf5}: {top_group}')
        
        # 提取目标列对应的数据集
        target_cols = ['H1', 'L1', 'frequency_Hz']
        data_dict = {}
        for col in target_cols:
            # 访问Group下的具体Dataset并读取数据
            data_dict[col] = arquivo[top_group][col][:]
        
        # 将字典转换为DataFrame
        df = pd.DataFrame(data_dict)
        dfs.append(df)
        
        print()
        numArquivo += 1

# 合并所有文件的DataFrame
resultado_final = pd.concat(dfs, ignore_index=True)
print(resultado_final.head())

关键修改说明

  1. 直接定位到顶级Group下的目标Dataset,避免了对Group错误使用切片的操作
  2. 通过字典收集各列数据,确保生成的DataFrame列名与目标列完全匹配
  3. 简化循环逻辑,只处理需要的列,减少不必要的遍历操作

内容的提问来源于stack exchange,提问作者Tiago de Freitas Damasceno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:14:52