390 Stimmen

Nur das Datumsteil beibehalten, wenn pandas.to_datetime verwendet wird

Ich benutze pandas.to_datetime, um die Daten in meinem Datensatz zu parsen. Pandas stellt die Daten standardmäßig als datetime64[ns] dar, obwohl die Daten alle täglich sind. Ich frage mich, ob es einen eleganten/cleveren Weg gibt, die Daten in datetime.date oder datetime64[D] umzuwandeln, so dass, wenn ich die Daten in ein CSV schreibe, die Daten nicht mit 00:00:00 angehängt werden. Ich weiß, dass ich den Typ manuell elementweise konvertieren kann:

[dt.to_datetime().date() for dt in df.dates]

Aber das ist wirklich langsam, da ich viele Zeilen habe, und es ist irgendwie kontraproduktiv, pandas.to_datetime zu verwenden. Gibt es eine Möglichkeit, den dtype der gesamten Spalte auf einmal umzuwandeln? Oder unterstützt pandas.to_datetime alternativ eine Präzisionsspezifikation, sodass ich den Zeitteil loswerden kann, während ich mit täglichen Daten arbeite?

4voto

fantabolous Punkte 18632

Bei Tabellen mit mehr als 1000000 Zeilen habe ich festgestellt, dass beide schnell sind, wobei floor nur geringfügig schneller ist:

df['mydate'] = df.index.floor('d')

oder

df['mydate'] = df.index.normalize()

Wenn Ihr Index Zeitzonen hat und Sie diese nicht im Ergebnis haben möchten, tun Sie Folgendes:

df['mydate'] = df.index.tz_localize(None).floor('d')

df.index.date ist viele Male langsamer; to_datetime() ist noch schlimmer. Beide haben den weiteren Nachteil, dass die Ergebnisse nicht in einem hdf-Speicher gespeichert werden können, da dieser den Datentyp datetime.date nicht unterstützt.

Beachten Sie, dass ich den Index hier als Datumsquelle verwendet habe; wenn Ihre Quelle eine andere Spalte ist, müssten Sie .dt hinzufügen, z.B. df.mycol.dt.floor('d')

1voto

Punnerud Punkte 5188

Dies hat für mich beim UTC-Zeitstempel (2020-08-19T09:12:57.945888) funktioniert

for di, i in enumerate(df['IhrSpaltenname']):
    df['IhrSpaltenname'][di] = pd.Timestamp(i)

0voto

sparrow Punkte 9166

Wenn die Spalte noch nicht im Datumsformat vorliegt:

df['DTformat'] = pd.to_datetime(df['col'])

Sobald sie im Datumsformat ist, können Sie die gesamte Spalte nur auf das Datum konvertieren:

df['DateOnly'] = df['DTformat'].apply(lambda x: x.date())

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