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?

21voto

j08lue Punkte 1587

Pandas DatetimeIndex und Series haben eine Methode namens normalize, die genau das tut, was du willst.

Du kannst mehr darüber in dieser Antwort lesen.

Es kann wie folgt verwendet werden: ser.dt.normalize()

15voto

Katekarin Punkte 294

Ich gebe nur eine aktualisiertere Antwort, falls jemand diesen alten Beitrag sieht.

Das Hinzufügen von "utc=False" beim Konvertieren in ein datetime entfernt die Zeitzonenkomponente und behält nur das Datum in einem datetime64[ns] Datentyp bei.

pd.to_datetime(df['Date'], utc=False)

Sie können es in Excel speichern, ohne den Fehler "ValueError: Excel unterstützt keine Datums- und Uhrzeitangaben mit Zeitzonen. Stellen Sie sicher, dass Datums- und Uhrzeitangaben vor dem Schreiben in Excel zeitzonenunabhängig sind." zu erhalten.

Bildbeschreibung hier eingeben

14voto

Talha Tayyab Punkte 1803
df['Column'] = df['Column'].dt.strftime('%m/%d/%Y')

Dies gibt Ihnen nur die Daten und KEINE ZEIT im gewünschten Format. Sie können das Format nach Bedarf ändern '%m/%d/%Y'. Es ändert den Datentyp der Spalte in 'object'.


Wenn Sie nur die Daten möchten und KEINE Zeit im Format YYYY-MM-DD verwenden möchten:

df['Column'] = pd.to_datetime(df['Column']).dt.date

Der Datentyp wird 'object' sein.


Für den Datentyp 'datetime64' verwenden Sie:

df['Column'] = pd.to_datetime(df['Column']).dt.normalize()

6voto

Dale Punkte 3900

Umstellung auf datetime64[D]:

df.dates.values.astype('M8[D]')

Das Zurückweisen an eine DataFrame-Spalte wird es jedoch wieder auf [ns] zurücksetzen.

Wenn Sie das tatsächliche datetime.date möchten:

dt = pd.DatetimeIndex(df.dates)
dates = np.array([datetime.date(*date_tuple) for date_tuple in zip(dt.year, dt.month, dt.day)])

5voto

Climbs_lika_Spyder Punkte 5192

Ich wollte die Art für eine Reihe von Spalten in einem Datenrahmen ändern und dann die Zeit entfernen und den Tag beibehalten. round(), floor(), ceil() alle funktionieren

df[date_columns] = df[date_columns].apply(pd.to_datetime)
df[date_columns] = df[date_columns].apply(lambda t: t.dt.floor('d'))

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