从多个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())
关键修改说明
- 直接定位到顶级Group下的目标Dataset,避免了对Group错误使用切片的操作
- 通过字典收集各列数据,确保生成的DataFrame列名与目标列完全匹配
- 简化循环逻辑,只处理需要的列,减少不必要的遍历操作
内容的提问来源于stack exchange,提问作者Tiago de Freitas Damasceno
相关产品推荐
相关产品推荐

