705 Stimmen

Python Pandas Fehler beim Tokenisieren von Daten

Ich versuche, pandas zu verwenden, um eine .csv-Datei zu manipulieren, aber ich erhalte diesen Fehler:

pandas.parser.CParserError: Fehler beim Tokenisieren der Daten. C Fehler: Erwartet 2 Felder in Zeile 3, aber 12 gesehen

Ich habe versucht, die pandas-Dokumentation 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 lösen? Sollte ich das csv-Modul oder eine andere Sprache verwenden?

Die Datei stammt von Morningstar

3voto

Kims Sifers Punkte 31

Manchmal ist das Problem nicht, wie man Python benutzt, sondern mit den Rohdaten.
Ich habe diese Fehlermeldung erhalten

Fehler beim Tokenisieren von Daten. C Fehler: 18 Felder in Zeile 72 erwartet, 19 gesehen.

Es stellte sich heraus, dass in der Spalte Beschreibung manchmal Kommas vorhanden waren. Das bedeutet, dass die CSV-Datei bereinigt werden muss oder ein anderer Trennzeichen verwendet werden sollte.

3voto

bcoz Punkte 63

Eine Alternative, die ich gefunden habe, um mit ähnlichen Analysefehlern umzugehen, besteht darin, das CSV-Modul zu verwenden, um Daten in ein Pandas-Datenframe umzuleiten. Zum Beispiel:

import csv
import pandas as pd
path = 'C:/Dateispeicherort/'
file = 'dateiname.csv'
f = open(path+file,'rt')
reader = csv.reader(f)

# Sobald die Inhalte verfügbar sind, lege ich sie in einer Liste ab
csv_list = []
for l in reader:
    csv_list.append(l)
f.close()
# Jetzt hat pandas keine Probleme, daraus ein DataFrame zu erstellen
df = pd.DataFrame(csv_list)

Ich finde das CSV-Modul etwas robuster für schlecht formatierte, durch Kommas getrennte Dateien und hatte daher Erfolg mit diesem Ansatz, um solche Probleme zu lösen.

3voto

kepy97 Punkte 880

Die folgende Befehlssequenz funktioniert (die erste Zeile der Daten geht verloren - keine header=None vorhanden -, aber zumindest lädt sie):

df = pd.read_csv(filename, usecols=range(0, 42)) df.columns = ['YR', 'MO', 'DAY', 'HR', 'MIN', 'SEC', 'HUND', 'ERROR', 'RECTYPE', 'LANE', 'SPEED', 'CLASS', 'LENGTH', 'GVW', 'ESAL', 'W1', 'S1', 'W2', 'S2', 'W3', 'S3', 'W4', 'S4', 'W5', 'S5', 'W6', 'S6', 'W7', 'S7', 'W8', 'S8', 'W9', 'S9', 'W10', 'S10', 'W11', 'S11', 'W12', 'S12', 'W13', 'S13', 'W14']

Folgendes funktioniert NICHT:

df = pd.read_csv(filename, names=['YR', 'MO', 'DAY', 'HR', 'MIN', 'SEC', 'HUND', 'ERROR', 'RECTYPE', 'LANE', 'SPEED', 'CLASS', 'LENGTH', 'GVW', 'ESAL', 'W1', 'S1', 'W2', 'S2', 'W3', 'S3', 'W4', 'S4', 'W5', 'S5', 'W6', 'S6', 'W7', 'S7', 'W8', 'S8', 'W9', 'S9', 'W10', 'S10', 'W11', 'S11', 'W12', 'S12', 'W13', 'S13', 'W14'], usecols=range(0, 42))

CParserError: Fehler beim Tokenisieren der Daten. C-Fehler: In Zeile 1605634 wurden 53 Felder erwartet, aber 54 wurden gesehen. Folgendes funktioniert NICHT:

df = pd.read_csv(filename, header=None)

CParserError: Fehler beim Tokenisieren der Daten. C-Fehler: In Zeile 1605634 wurden 53 Felder erwartet, aber 54 wurden gesehen

Daher müssen Sie in Ihrem Problem usecols=range(0, 2) übergeben.

3voto

Das habe ich gemacht.

sep='::' hat mein Problem gelöst:

data=pd.read_csv('C:\\Users\\HP\\Downloads\\NPL ASSINGMENT 2 imdb_labelled\\imdb_labelled.txt',engine='python',header=None,sep='::')

3voto

reggie Punkte 3406

Überprüfen Sie, ob Sie die CSV-Datei mit dem richtigen Trennzeichen laden.

df = pd.read_csv(csvname, header=0, sep=",")

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X