Mein Datenrahmen hat eine DOB
Spalte (Beispielformat 1/1/2016
), die standardmäßig in den Pandas-Typ 'Objekt' konvertiert wird:DOB object
Wenn Sie dies in das Datumsformat mit df['DOB'] = pd.to_datetime(df['DOB'])
konvertieren, wird das Datum in: konvertiert 2016-01-26
und dtype
lautet : DOB datetime64[ns]
.
Jetzt möchte ich dieses Datumsformat in 01/26/2016
oder in andere allgemeine Datumsformate konvertieren . Wie mache ich es?
Unabhängig von der Methode, die ich versuche, wird das Datum immer im 2016-01-26
Format angezeigt.
Antworten:
Sie können verwenden,
dt.strftime
wenn Siedatetime
in andere Formate konvertieren müssen (beachten Sie jedoch, dass danndtype
der Spalteobject
(string
) lautet):quelle
.merge
eine Datetime-Spalte eines anderen Datenrahmens verwenden möchte? Ist es sinnvoll, die andere datetime-Spalte in eine Objektspalte zu konvertieren, um dies zu tun.merge
?.merge
weiß , kann dies immer noch korrekt durchgeführt werden, wenn beide Spalten Datums- / Uhrzeitspalten sind, auch wenn sie nicht genau das gleiche Format haben. Ist das richtig?Ändern des Formats, aber nicht des Typs:
quelle
date
Spalte lautet " 26. November 2019".strftime()
bedeutet "Zeichenfolge ab Zeit" ,df["date"].dt.strftime('%Y-%m')
wird also eine Zeichenfolge"2019-11"
für dieses Element sein. Dannpd.to_datetime()
wird diese Zeichenfolge wieder in dasdatetime64
Format konvertiert, jetzt jedoch als " 1. November 2019"! Das Ergebnis ist also: Keine Formatänderung, sondern die Änderung des Datumswerts selbst!Der folgende Code hat bei mir anstelle des vorherigen funktioniert - probieren Sie es aus!
quelle
format='%m/%d/%Y'
Parameter dient zum Parsen einer Zeichenfolge, dh Sie sollen die Zeichenfolge in einem solchen Format bereitstellen (z"5/13/2019"
. B. ). Nichts mehr, keine Formatänderung. Es wird weiterhin als angezeigt2019-05-13
- oder es wird eine Ausnahme ausgelöst, wenndf['DOB'].astype(str)
Elemente enthalten sind, die nicht in einem solchen Format vorliegen, z"2019-05-13"
. B. in einem Format .Im Vergleich zur ersten Antwort empfehle ich, zuerst dt.strftime () und dann pd.to_datetime () zu verwenden. Auf diese Weise wird weiterhin der Datentyp datetime angezeigt.
Beispielsweise,
quelle
Der folgende Code ändert sich in den Typ 'datetime' und formatiert auch in der angegebenen Formatzeichenfolge. Funktioniert gut!
quelle
df['DOB']=pd.to_datetime(df['DOB']).dt.strftime('%m/%d/%Y')
Sie können dies versuchen, um das Datumsformat in TT-MM-JJJJ zu konvertieren:
quelle
dayfirst=True
ist nur die Angabe einer Datumsanalysereihenfolge, z. B. wird diese ambivalente Datumszeichenfolge als "2-1-2019" als 2. Januar 2019 und nicht als 1. Februar 2019 analysiert. Nichts weiter, keine Änderung für die Ausgabeformatierung .Es gibt einen Unterschied zwischen dem Inhalt einer Datenrahmenzelle (ein Binärwert) und ihrer Darstellung (Anzeige) für uns Menschen.
Wenn Sie das Jupyter-Notizbuch zum Anzeigen Ihres Datenrahmens verwenden oder ihn in Form einer HTML-Datei präsentieren möchten (mit vielen
id
undclass
Attributen für weiteres CSS-Styling, wenn Sie dies wünschen), können Sie das Styling verwenden .Ich nehme an, dass Ihre Spalte
DOB
bereits den Typ hatdatetime64
(Sie haben gezeigt, dass Sie wissen, wie Sie ihn erreichen können). Ich habe einen einfachen Datenrahmen (mit nur einer Spalte) vorbereitet, um Ihnen einige grundlegende Stile zu zeigen:Nicht gestylt:
Styling als
mm/dd/yyyy
:Styling als
dd-mm-yyyy
:Achtung! Das zurückgebende Objekt ist KEIN Datenrahmen - es ist ein Objekt der Klasse. Weisen Sie es
Styler
also nicht zurück zudf
:Tu das nicht:
(Auf jeden Datenrahmen kann über seine
.style
Eigenschaft auf sein Styler-Objekt zugegriffen werden , und wir haben diesesdf.style
Objekt geändert , nicht den Datenrahmen selbst.)Warum zeigt Ihr Styler-Objekt (oder ein Ausdruck, der es zurückgibt), der als letzter Befehl in einer Jupyter-Notizbuchzelle verwendet wird, Ihre (gestaltete) Tabelle an und nicht das Styler-Objekt selbst?
Weil jedes Styler-Objekt über eine
._repr_html_()
Rückrufmethode verfügt, die einen HTML-Code zum Rendern Ihres Datenrahmens zurückgibt (als schöne HTML-Tabelle).Jupyter Notebook IDE ruft diese Methode automatisch auf, um Objekte zu rendern, die sie haben.
Ein Styler-Objekt verfügt auch über eine Methode
render()
, wenn Sie eine Zeichenfolge mit dem HTML-Code erhalten möchten (z. B. zum Veröffentlichen Ihres formatierten Datenrahmens im Web):quelle
if
Aussage, die jedem Programmierer so bekannt ist? - Trotzdem danke für Ihren Kommentar, es kann für einige Leute hilfreich sein.pd.to_datetime()
auch die Argumente, umerrors='raise'/'coerce'/'ignore', dayfirst, yearfirst, utc, exact
zu steuern, wie präzise und ausnahmefreudig es ist und ob ungültige Ausgaben dazu gezwungen werdenNaT
oder was. Was es in "realen" Datensätzen komplizierter macht, sind gemischte / fehlende / unvollständige Formate, Zeiten, Zeitzonen usw.; Ausnahmen sind nicht unbedingt schlechte Dinge.