web-dev-qa-db-fra.com

Comment puis-je lire le fichier tar.gz en utilisant pandas read_csv avec l'option de compression gzip?

J'ai un csv très simple, avec les données suivantes, compressées dans le fichier tar.gz. Je dois lire cela dans la trame de données en utilisant pandas.read_csv.

   A  B
0  1  4
1  2  5
2  3  6

import pandas as pd
pd.read_csv("sample.tar.gz",compression='gzip')

Cependant, je reçois une erreur:

CParserError: Error tokenizing data. C error: Expected 1 fields in line 440, saw 2

Voici l'ensemble des commandes read_csv et les différentes erreurs que j'obtiens avec elles:

pd.read_csv("sample.tar.gz",compression='gzip',  engine='python')
Error: line contains NULL byte

pd.read_csv("sample.tar.gz",compression='gzip', header=0)
CParserError: Error tokenizing data. C error: Expected 1 fields in line 440, saw 2

pd.read_csv("sample.tar.gz",compression='gzip', header=0, sep=" ")
CParserError: Error tokenizing data. C error: Expected 2 fields in line 94, saw 14    

pd.read_csv("sample.tar.gz",compression='gzip', header=0, sep=" ", engine='python')
Error: line contains NULL byte

Qu'est-ce qui ne va pas ici? Comment puis-je réparer cela?

11
Geet
df = pd.read_csv('sample.tar.gz', compression='gzip', header=0, sep=' ', quotechar='"', error_bad_lines=False)

Remarque: error_bad_lines=False ignorera les lignes incriminées.

17
Marlon Abeykoon

Vous pouvez utiliser le module tarfile pour lire un fichier particulier de l'archive tar.gz (comme indiqué dans ce problème résol ). S'il n'y a qu'un seul fichier dans l'archive, vous pouvez le faire:

import tarfile
import pandas as pd
with tarfile.open("sample.tar.gz", "r:*") as tar:
    csv_path = tar.getnames()[0]
    df = pd.read_csv(tar.extractfile(csv_path), header=0, sep=" ")

Le mode de lecture r:* Gère correctement l'extension gz (ou d'autres types de compression). S'il y a plusieurs fichiers dans le fichier tar zippé, vous pouvez faire quelque chose comme la ligne csv_path = list(n for n in tar.getnames() if n.endswith('.csv'))[-1] pour obtenir le dernier fichier csv dans le dossier archivé.

0
user3780389