Ich habe eine durch Tabulatoren getrennte Datendatei in Windows mit Pandas / Python ohne Probleme gelesen. Die Datendatei enthält Notizen in den ersten drei Zeilen und folgt mit einer Überschrift.
df = pd.read_csv(myfile,sep='\t',skiprows=(0,1,2),header=(0))
Ich versuche jetzt, diese Datei mit meinem Mac zu lesen. (Ich verwende Python zum ersten Mal auf einem Mac.) Ich erhalte die folgende Fehlermeldung.
pandas.parser.CParserError: Error tokenizing data. C error: Expected 1
fields in line 8, saw 39
Wenn Sie das Argument error_bad_lines für read_csv auf False setzen , erhalte ich die folgenden Informationen, die bis zum Ende der letzten Zeile fortgesetzt werden.
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
...
Muss ich einen Wert für das Codierungsargument angeben ? Es scheint, als ob ich nicht sollte, weil das Lesen der Datei unter Windows gut funktioniert.
(0)
und(0,)
in Python? Hinweis:(0)
ist0
und(0,)
ist0,
- Komma erstellt ein Tupel (außer einem leeren), keine Klammern.df = pd.read_table(myfile, skiprows=[0,1,2], header=0)
?Antworten:
Der größte Hinweis ist, dass alle Zeilen in einer Zeile zurückgegeben werden. Dies zeigt an, dass Leitungsabschlusszeichen ignoriert werden oder nicht vorhanden sind.
Sie können den Zeilenabschluss für csv_reader angeben. Wenn Sie auf einem Mac arbeiten, enden die erstellten Linien
\r
eher mit dem Linux-Standard\n
oder besser mit dem Hosenträger- und Gürtelansatz von Windows\r\n
.Sie können alle Ihre Daten auch mit dem Codecs-Paket öffnen. Dies kann die Robustheit auf Kosten der Dokumentladegeschwindigkeit erhöhen.
quelle
Eine andere Möglichkeit wäre
engine='python'
, dem Befehl etwas hinzuzufügenpandas.read_csv(filename, sep='\t', engine='python')
quelle