J'ai lu un fichier de données délimité par des tabulations dans Windows avec Pandas / Python sans aucun problème. Le fichier de données contient des notes dans les trois premières lignes, puis suit avec un en-tête.
df = pd.read_csv(myfile,sep='\t',skiprows=(0,1,2),header=(0))
J'essaye maintenant de lire ce fichier avec mon Mac. (Ma première utilisation de Python sur Mac.) J'obtiens l'erreur suivante.
pandas.parser.CParserError: Error tokenizing data. C error: Expected 1
fields in line 8, saw 39
Si vous définissez l' argument error_bad_lines pour read_csv sur False , j'obtiens les informations suivantes, qui continuent jusqu'à la fin de la dernière ligne.
Skipping line 8: expected 1 fields, saw 39
Skipping line 9: expected 1 fields, saw 125
Skipping line 10: expected 1 fields, saw 125
Skipping line 11: expected 1 fields, saw 125
Skipping line 12: expected 1 fields, saw 125
Skipping line 13: expected 1 fields, saw 125
Skipping line 14: expected 1 fields, saw 125
Skipping line 15: expected 1 fields, saw 125
Skipping line 16: expected 1 fields, saw 125
Skipping line 17: expected 1 fields, saw 125
...
Dois-je spécifier une valeur pour l' argument d' encodage ? Il semble que je ne devrais pas avoir à le faire car la lecture du fichier fonctionne correctement sous Windows.
(0)
et(0,)
en Python? Remarque:(0)
is0
and(0,)
is0,
- virgule crée un tuple (sauf un vide), pas des parenthèses.df = pd.read_table(myfile, skiprows=[0,1,2], header=0)
?Réponses:
Le plus gros indice est que les lignes sont toutes renvoyées sur une seule ligne. Cela indique que les terminaisons de ligne sont ignorées ou ne sont pas présentes.
Vous pouvez spécifier la terminaison de ligne pour csv_reader. Si vous êtes sur un mac, les lignes créées se termineront par
\r
plutôt que par le standard Linux\n
ou mieux encore par l'approche des bretelles et de la ceinture des fenêtres\r\n
.pandas.read_csv(filename, sep='\t', lineterminator='\r')
Vous pouvez également ouvrir toutes vos données à l'aide du package codecs. Cela peut augmenter la robustesse au détriment de la vitesse de chargement des documents.
import codecs doc = codecs.open('document','rU','UTF-16') #open for reading with "universal" type set df = pandas.read_csv(doc, sep='\t')
la source
Une autre option serait d'ajouter
engine='python'
à la commandepandas.read_csv(filename, sep='\t', engine='python')
la source