wake-up-neo.net

Das Lesen von durch Tabulatoren getrennten Dateien mit Pandas - funktioniert unter Windows, aber nicht auf Mac

Ich habe unter Windows mit Pandas/Python ohne Probleme eine durch Tabulatoren getrennte Datendatei gelesen. Die Datendatei enthält Notizen in den ersten drei Zeilen und anschließend eine Kopfzeile.

df = pd.read_csv(myfile,sep='\t',skiprows=(0,1,2),header=(0))

Ich versuche jetzt, diese Datei mit meinem Mac zu lesen. (Mein erstes Mal mit Python auf 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 Argument encoding angeben? Es scheint, als müsste ich das nicht tun, da das Lesen der Datei unter Windows problemlos funktioniert.

55
user3062149

Der größte Hinweis ist, dass alle Zeilen in einer Zeile zurückgegeben werden. Dies weist darauf hin, 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 Zeilen mit \ranstelle des Linux-Standards \n oder noch besser die Hosenträger und Gürtel Ansatz von Fenstern mit \r\n.

pandas.read_csv(filename, sep='\t', lineterminator='\r')

Sie können auch alle Ihre Daten mit dem Codec-Paket öffnen. Dies kann die Robustheit auf Kosten der Dokumentladegeschwindigkeit erhöhen.

import codecs

doc = codecs.open('document','rU','UTF-16') #open for reading with "universal" type set

df = pandas.read_csv(doc, sep='\t')
69
brad sanders

Eine andere Möglichkeit wäre, engine='python' Zum Befehl pandas.read_csv(filename, sep='\t', engine='python') hinzuzufügen.

1
user3479780