1
resposta

Dúvidas sobre arquivo csv.tar.gz

Boa noite!

Estou com três bases de dados dentro de um arquivo csv, mas ele está nesse formato analytics.csv.tar.gz

Gostaria de saber como poderia ler esse tipo de arquivo usando o jupyter notebook. Tentei com esse código, mas me retorna o erro "expected string or bytes-like object"

import tarfile
import numpy as np
from datetime import datetime

tar = tarfile.open('Bases/analytics.csv.tar.gz', 'r:gz')
for member in tar.getmembers():
     f = tar.extractfile(member)
     if f:
         content = f.read()
         Data = np.loadtxt(content)
1 resposta

E aí Gustavo! Tudo bem com você?

O erro está sendo gerado devido a função do numpy que você está usando np.loadtxt(). Isso porque, essa função espera receber um arquivo .txt, entretanto você estava passando um conjunto de bytes para ela.

Sendo assim, para transformar cada arquivo .csv em um dataframe do pandas, você pode tentar o seguinte:

import tarfile
import pandas as pd
from datetime import datetime

tar = tarfile.open('Bases/analytics.csv.tar.gz', 'r:gz', encoding='utf-8')
for member in tar.getmembers():
     f = tar.extractfile(member)
     if f:
        df = pd.read_csv(f)
        print(df)
        print('--------')

Nesse caso, você deve visualizar seus dataframes conforme nesse exemplo:

Imagem com 3 dataframes aleatórios impressos na tela com tracinhos separando cada um deles

Entretanto, nesse caso, a cada iteração do laço for um dataframe irá sobreescrever o outro na variável df. Então, é importante armazenar esses dataframes a cada iteração. Para isso, podemos criar uma lista e ir adicionando esses dataframes:

import tarfile
import pandas as pd
from datetime import datetime

dataframes = []

tar = tarfile.open('Bases/analytics.csv.tar.gz', 'r:gz', encoding='utf-8')
for member in tar.getmembers():
     f = tar.extractfile(member)
     if f:
        df = pd.read_csv(f)
        dataframes.append(df)
        print(df)
        print('--------')

Dessa forma, você poderá acessar cada um dos seus 3 dataframes por meio do índice. Por exemplo, caso queira acessar apenas o primeiro dataframe você pode utilizar o comando: dataframes[0] e assim por diante.

Qualquer dúvida me fala aqui, que nós vamos conversando, tá bom?

Bons estudos!