Ich habe einen Pandas DataFrame mit einer Datumsspalte. Jetzt muss ich alle Zeilen im DataFrame herausfiltern, deren Daten außerhalb der nächsten zwei Monate liegen. Im Wesentlichen muss ich nur die Zeilen behalten, die innerhalb der nächsten zwei Monate liegen.
Was ist der beste Weg, um dies zu erreichen?
query
hier verwenden.df.query('20130101 < date < 20130201')
..loc
und.ix
) und Spalten in Ihren Beispielen nicht gleichwertig sind.df.ix['2014-01-01':'2014-02-01']
enthält ,2014-02-01
währenddf[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
nicht enthalten2013-02-01
, es werden nur die Zeilen bis übereinstimmen2013-01-31
.Die vorherige Antwort ist meiner Erfahrung nach nicht korrekt. Sie können keine einfache Zeichenfolge übergeben. Sie muss ein Datum / Uhrzeit-Objekt sein. So:
quelle
Und wenn Ihre Daten durch Importieren eines datetime-Pakets standardisiert werden, können Sie einfach Folgendes verwenden:
Mit dieser Funktion können Sie Ihre Datumszeichenfolge mit dem Datum / Uhrzeit-Paket standardisieren:
quelle
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
.Wenn Ihre datetime-Spalte den Datasetime-Typ Pandas hat (z. B.
datetime64[ns]
), benötigen Sie für eine ordnungsgemäße Filterung das Objekt pd.Timestamp , zum Beispiel:quelle
Wenn die Daten im Index enthalten sind, dann einfach:
quelle
Mit pd.Timestamp können Sie eine Abfrage und eine lokale Referenz ausführen
mit der Ausgabe
Schauen Sie sich die Pandas-Dokumentation für DataFrame.query an , insbesondere die Erwähnung des lokalen variabile-referenzierten udsing-
@
Präfixes. In diesem Fall wird auf diepd.Timestamp
Verwendung des lokalen Alias verwiesents
, um eine Zeitstempelzeichenfolge angeben zu könnenquelle
Wenn wir also die CSV-Datendatei laden, müssen wir die Datumsspalte jetzt wie folgt als Index festlegen, um Daten basierend auf einem Datumsbereich zu filtern. Dies wurde für die jetzt veraltete Methode pd.DataFrame.from_csv () nicht benötigt.
Wenn Sie die Daten nur für zwei Monate von Januar bis Februar anzeigen möchten, z. B. 2020-01-01 bis 2020-02-29, können Sie dies tun:
Dies wurde für Python 3.7 getestet. Ich hoffe, Sie finden dies nützlich.
quelle
index_col
mussstring
keine Liste sein.mydata = pd.read_csv('mydata.csv',index_col='date')
Wie wäre es mit
pyjanitor
Es hat coole Funktionen.
Nach dem
pip install pyjanitor
quelle
Der kürzeste Weg, um Ihren Datenrahmen nach Datum zu filtern: Nehmen wir an, Ihre Datumsspalte ist der Typ datetime64 [ns]
quelle
Ich darf noch keine Kommentare schreiben, also schreibe ich eine Antwort, wenn jemand sie alle liest und diese erreicht.
Wenn der Index des Datasets eine Datums- / Uhrzeitangabe ist und Sie diese nur nach (zum Beispiel) Monaten filtern möchten, können Sie Folgendes tun:
Dadurch wird der Datensatz bis März für Sie gefiltert.
quelle
Sie können den Zeitbereich einfach wie folgt auswählen: df.loc ['start_date': 'end_date']
quelle