Python Pandas Fehler Tokenisierung von Daten

I'm versucht, Pandas zu verwenden, um eine .csv-Datei zu manipulieren, aber ich bekomme diesen Fehler:

pandas.parser.CParserError: Fehler beim Tokenisieren von Daten. C-Fehler: Erwartet 2 Felder in Zeile 3, sah 12

Ich habe versucht, die Pandas-Dokumente zu lesen, aber nichts gefunden.

Mein Code ist einfach:

path = 'GOOG Key Ratios.csv'
#print(open(path).read())
data = pd.read_csv(path)

Wie kann ich das Problem lösen? Soll ich das Modul csv oder eine andere Sprache verwenden?

Die Datei stammt von Morningstar

Lösung

könnten Sie auch versuchen;

data = pd.read_csv('file1.csv', error_bad_lines=False)

Beachten Sie bitte, dass dadurch die betreffenden Zeilen übersprungen werden.

Kommentare (9)

Der Parser wird durch die Kopfzeile der Datei verwirrt. Er liest die erste Zeile und schließt von dieser Zeile auf die Anzahl der Spalten. Aber die ersten beiden Zeilen sind nicht repräsentativ für die tatsächlichen Daten in der Datei.

Versuchen Sie es mit data = pd.read_csv(path, skiprows=2)

Kommentare (0)

Ich bin auf das gleiche Problem gestoßen. Die Verwendung von pd.read_table() für dieselbe Quelldatei schien zu funktionieren. Ich konnte den Grund dafür nicht nachvollziehen, aber es war ein nützlicher Workaround für meinen Fall. Vielleicht kann jemand, der sich besser auskennt, mehr Licht ins Dunkel bringen, warum es funktioniert hat.

Bearbeiten: Ich habe herausgefunden, dass dieser Fehler auftritt, wenn Sie Text in Ihrer Datei haben, der nicht das gleiche Format wie die eigentlichen Daten hat. Dies sind in der Regel Kopf- oder Fußzeilen (mehr als eine Zeile, daher funktioniert skip_header nicht), die nicht durch die gleiche Anzahl von Kommas getrennt sind wie die eigentlichen Daten (bei Verwendung von read_csv). Bei der Verwendung von read_table wird ein Tabulator als Trennzeichen verwendet, wodurch der aktuelle Fehler des Benutzers umgangen werden kann, aber andere Fehler entstehen.

Normalerweise umgehe ich dies, indem ich die zusätzlichen Daten in eine Datei lese und dann die Methode read_csv() verwende.

Die genaue Lösung kann je nach Datei unterschiedlich sein, aber dieser Ansatz hat bei mir in mehreren Fällen funktioniert

Kommentare (0)