Das Problem für mich war, dass meiner CSV-Datei intraday eine neue Spalte hinzugefügt wurde. Die akzeptierte Lösung würde nicht funktionieren, da jede zukünftige Zeile verworfen würde, wenn ich error_bad_lines=False
verwenden würde.
Die Lösung in diesem Fall bestand darin, den usecols Parameter in pd.read_csv()
zu verwenden. Auf diese Weise kann ich nur die Spalten angeben, die ich in die CSV einlesen möchte, und mein Python-Code bleibt gegen zukünftige Änderungen an der CSV-Datei resistent, solange eine Kopfzeile vorhanden ist (und die Spaltennamen sich nicht ändern).
usecols : list-like oder callable, optional
Gibt eine Teilmenge der Spalten zurück. Wenn list-like, müssen alle Elemente entweder positionell sein (d.h. Ganzzahlen, die in die Dokumentspalten indiziert sind) oder
Strings, die Spaltennamen entsprechen, die entweder vom Benutzer in
Namen bereitgestellt werden oder aus der Kopfzeile(n) des Dokuments abgeleitet werden. Ein
gültiger list-like usecols-Parameter könnte [0, 1, 2] oder ['foo', 'bar',
'baz'] sein. Die Reihenfolge der Elemente wird ignoriert, sodass usecols=[0, 1] das gleiche ist wie [1,
0]. Um ein DataFrame aus Daten mit Beibehaltung der Elementreihenfolge instanziieren
verwenden Sie pd.read_csv(data, usecols=['foo', 'bar'])[['foo', 'bar']] für
Spalten in ['foo', 'bar'] Reihenfolge oder pd.read_csv(data, usecols=['foo',
'bar'])[['bar', 'foo']] für ['bar', 'foo'] Reihenfolge.
Beispiel
my_columns = ['foo', 'bar', 'bob']
df = pd.read_csv(file_path, usecols=my_columns)
Ein weiterer Vorteil ist, dass ich deutlich weniger Daten in den Speicher laden kann, wenn ich nur 3-4 Spalten einer CSV-Datei verwende, die 18-20 Spalten hat.