Extração de dados de arquivos HDF5 para um DataFrame do Pandas

27 views
Skip to first unread message

Tiago de Freitas Damasceno

unread,
Jan 14, 2024, 7:33:14 AMJan 14
to Python Brasil
Olá, pessoal! 

Antes de mais nada, meus agradecimentos pelo espaço. 

Vim até aqui para procurar ajuda, porque preciso extrair dados de vários arquivos .HDF5 que estão em uma pasta e colocá-los em um dataframe único do Pandas.

Compartilhei os arquivos em meu Google Drive para seja fácil acessá-los: 

O meu código está abaixo e, com a minha lógica de programação, está retornando erro abaixo. Agradeço a ajuda de vocês!

<INÍCIO CÓDIGO>

# Imports
import glob
import h5py
import numpy as np
import pandas as pd

# Cria uma lista para armazenar os DataFrames de cada arquivo HDF5:
dfs = []

# Obtém a lista de arquivos HDF5 de treino usando glob:
arquivos_hdf5_treino = glob.glob('../Data/train/*.hdf5')

# Visualiza a lista de arquivos:
arquivos_hdf5_treino
['../Data/OriginalDatasets/train\\001121a05.hdf5', '../Data/OriginalDatasets/train\\00a6db666.hdf5', '../Data/OriginalDatasets/train\\00f36a6ac.hdf5', '../Data/OriginalDatasets/train\\0197bacf8.hdf5', '../Data/OriginalDatasets/train\\01b8b67f3.hdf5', '../Data/OriginalDatasets/train\\01dba9731.hdf5', '../Data/OriginalDatasets/train\\02887d232.hdf5', '../Data/OriginalDatasets/train\\02c8f43f3.hdf5', '../Data/OriginalDatasets/train\\0367dc82c.hdf5', '../Data/OriginalDatasets/train\\0517ef7fe.hdf5', '../Data/OriginalDatasets/train\\05c0675fe.hdf5', '../Data/OriginalDatasets/train\\05cdc0769.hdf5', '../Data/OriginalDatasets/train\\05f0aef12.hdf5', '../Data/OriginalDatasets/train\\067b3fb4b.hdf5', '../Data/OriginalDatasets/train\\06e321c6e.hdf5', '../Data/OriginalDatasets/train\\08a060dad.hdf5', '../Data/OriginalDatasets/train\\08c444d66.hdf5', '../Data/OriginalDatasets/train\\0920a4276.hdf5', '../Data/OriginalDatasets/train\\09531cde3.hdf5', '../Data/OriginalDatasets/train\\097370861.hdf5', '../Data/OriginalDatasets/train\\09e55aeba.hdf5', '../Data/OriginalDatasets/train\\09ecddbba.hdf5', '../Data/OriginalDatasets/train\\0ba188c57.hdf5', '../Data/OriginalDatasets/train\\0bc8216f2.hdf5', '../Data/OriginalDatasets/train\\0c55d030c.hdf5', '../Data/OriginalDatasets/train\\0d0ad0b19.hdf5', '../Data/OriginalDatasets/train\\0dc4c8ed0.hdf5', '../Data/OriginalDatasets/train\\0e39a18bf.hdf5', '../Data/OriginalDatasets/train\\0e60d4893.hdf5', '../Data/OriginalDatasets/train\\0e66d0460.hdf5', '../Data/OriginalDatasets/train\\0eb30f7c4.hdf5', '../Data/OriginalDatasets/train\\0ebe28dd5.hdf5', '../Data/OriginalDatasets/train\\0f53d8b96.hdf5', '../Data/OriginalDatasets/train\\10dfa2ed6.hdf5', '../Data/OriginalDatasets/train\\10eaa1cb2.hdf5', '../Data/OriginalDatasets/train\\1185806d8.hdf5', '../Data/OriginalDatasets/train\\119610501.hdf5', '../Data/OriginalDatasets/train\\123594dc7.hdf5', '../Data/OriginalDatasets/train\\1282f6c1f.hdf5', '../Data/OriginalDatasets/train\\12f0fd6fd.hdf5', '../Data/OriginalDatasets/train\\12f9824fa.hdf5', '../Data/OriginalDatasets/train\\13a23148f.hdf5', '../Data/OriginalDatasets/train\\13df1746e.hdf5', '../Data/OriginalDatasets/train\\147cc5f92.hdf5', '../Data/OriginalDatasets/train\\1510f75f9.hdf5', '../Data/OriginalDatasets/train\\1523dcd0c.hdf5', '../Data/OriginalDatasets/train\\1607fd753.hdf5', '../Data/OriginalDatasets/train\\1748ad051.hdf5', '../Data/OriginalDatasets/train\\177d1a100.hdf5', '../Data/OriginalDatasets/train\\1796d0836.hdf5']


# Inicializando o a contagem do número de arquivos hdf5:
numArquivo = 1

# Iterando sobre os arquivos hdf5 de Treino e extraindo dados:
for arquivo_hdf5 in arquivos_hdf5_treino:
    with h5py.File(arquivo_hdf5, 'r') as arquivo:
       
        # Imprimindo na tela a contagem do número de arquivos hdf5:
        print(f'Arquivo {numArquivo}')

        # Criando a lista de chaves nos arquivos HDF5:
        keyList = list(arquivo.keys())[0]

        # Criando a lista de variáveis nos arquivos HDF5:
        varList = list(arquivo[keyList])

        # Imprimindo todos os conjuntos de dados, também conhecidos como "keys" ou "chaves" em português:
        print(f'Chave em {arquivo_hdf5}: {keyList}')
           
        # Iterando sobre os conjuntos de dados no arquivo
        for key in arquivo.keys():
           
            # Imprimindo na tela as variáveis nos chaves:
            print(f'Variáveis na chave {key}: {varList}')

            # Extraindo os conjuntos de dados:
            dados = arquivo[key][:]

            # Imprimindo na tela o conjunto de dados:
            print(f'Dados no conjunto de dados {key}: {dados}')

            # Convertendo os dados para um DataFrame do Pandas:
            df = pd.DataFrame(dados)
                               
            # Adicionando o DataFrame à lista:
            dfs.append(df)
       
        # Imprimindo na tela uma linha em branco:
        print()
       
        # Incrementando o número de arquivos:
        numArquivo += 1

# Concatenando os DataFrames em um único DataFrame:
resultado_final = pd.concat(dfs, ignore_index=True)

# Visualizando as primeiras linhas:
print(resultado_final.head())

Arquivo 1 Chave em ../Data/OriginalDatasets/train\001121a05.hdf5: 001121a05 Variáveis na chave 001121a05: ['H1', 'L1', 'frequency_Hz']

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[7], line 27 24 print(f'Variáveis na chave {key}: {varList}') 26 # Extraindo os conjuntos de dados: ---> 27 dados = arquivo[key][:] 29 # Imprimindo na tela o conjunto de dados: 30 print(f'Dados no conjunto de dados {key}: {dados}') File h5py\_objects.pyx:54, in h5py._objects.with_phil.wrapper() File h5py\_objects.pyx:55, in h5py._objects.with_phil.wrapper() File c:\Opt\Anaconda3\Lib\site-packages\h5py\_hl\group.py:330, in Group.__getitem__(self, name) 328 oid = h5o.open(self.id, self._e(name), lapl=self._lapl) 329 else: --> 330 raise TypeError("Accessing a group is done with bytes or str, " 331 " not {}".format(type(name))) 333 otype = h5i.get_type(oid) 334 if otype == h5i.GROUP: TypeError: Accessing a group is done with bytes or str, not <class 'slice'> 


<FIM CÓDIGO>





Reply all
Reply to author
Forward
0 new messages