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?
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.
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é.