Wie kann ich filtern, welche Zeilen einer CSV mit Pandas in den Speicher geladen werden sollen? Dies scheint eine Option zu sein, die man finden sollte read_csv
. Vermisse ich etwas
Beispiel: Wir haben eine CSV mit einer Zeitstempelspalte und möchten nur die Zeilen laden, deren Zeitstempel größer als eine bestimmte Konstante ist.
chunk['filed']>constant
kann ich es zwischen 2 konstanten Werten einklemmen? Beispiel: Konstante1> Chunk ['Feld']> Konstante2. Oder kann ich "in Reichweite" verwenden?chunk[(chunk['field'] > constant2)&(chunk['field']<constant1)]
.loc
?chunk.loc[chunk['field'] > constant]
.loc
. Ich glaube nicht, dass.loc
es 2012 existiert hat, aber ich denke, dass die Verwendung heutzutage.loc
etwas expliziter ist.Ich habe keinen direkten Weg gefunden, dies im Kontext von zu tun
read_csv
.read_csv
Gibt jedoch einen DataFrame zurück, der durch Auswahl von Zeilen nach booleschem Vektor gefiltert werden kanndf[bool_vec]
:Hierbei werden alle Zeilen in df ausgewählt (vorausgesetzt, df ist ein beliebiger DataFrame, z. B. das Ergebnis eines
read_csv
Aufrufs, der mindestens eine datetime-Spalte enthälttimestamp
), für die die Werte in dertimestamp
Spalte größer als der Wert von targettime sind. Ähnliche Frage .quelle
Wenn der gefilterte Bereich zusammenhängend ist (wie es normalerweise bei Zeitfiltern (Stempelfiltern) der Fall ist), besteht die schnellste Lösung darin, den Zeilenbereich fest zu codieren. Einfach
skiprows=range(1, start_row)
mitnrows=end_row
Parametern kombinieren . Dann dauert der Import Sekunden, während die akzeptierte Lösung Minuten dauern würde. Ein paar Experimente mit der Initialestart_row
sind angesichts der Einsparungen bei den Importzeiten keine großen Kosten. Beachten Sie, dass wir die Kopfzeile mit verwendet habenrange(1,..)
.quelle
Wenn Sie unter Linux arbeiten, können Sie grep verwenden.
quelle
Sie können
nrows
Parameter angeben .import pandas as pd df = pd.read_csv('file.csv', nrows=100)
Dieser Code funktioniert gut in Version 0.20.3.
quelle