In[31]: df
Out[31]:
a time
012013-01-01122013-01-02232013-01-03In[32]: df['time']= df['time'].astype('datetime64[ns]')In[33]: df
Out[33]:
a time
012013-01-0100:00:00122013-01-0200:00:00232013-01-0300:00:00
Schön - danke - wie werde ich die 00:00:00 am Ende eines jeden Termins los?
user7289
1
Der Pandas-Zeitstempel hat sowohl Datum als auch Uhrzeit. Meinst du es in Python-Datumsobjekt konvertieren?
Warten
6
Sie können es durch konvertierendf['time'] = [time.date() for time in df['time']]
waitingkuo
3
Was bedeutet [ns]? Können Sie die Textzeichenfolge zu einem Datum machen und den Zeitteil dieses Datums entfernen?
Yoshiserry
1
@yoshiserry Es sind Nanosekunden und die Art und Weise, wie die Daten unter der Haube gespeichert werden, sobald sie ordnungsgemäß konvertiert wurden (Epochenzeit in Nanosekunden).
Andy Hayden
111
Im Wesentlichen äquivalent zu @waitingkuo, aber ich würde es to_datetimehier verwenden (es scheint ein wenig sauberer zu sein und bietet einige zusätzliche Funktionen, z. B. dayfirst):
In[11]: df
Out[11]:
a time
012013-01-01122013-01-02232013-01-03In[12]: pd.to_datetime(df['time'])Out[12]:02013-01-0100:00:0012013-01-0200:00:0022013-01-0300:00:00Name: time, dtype: datetime64[ns]In[13]: df['time']= pd.to_datetime(df['time'])In[14]: df
Out[14]:
a time
012013-01-0100:00:00122013-01-0200:00:00232013-01-0300:00:00
Handhabung ValueErrors
Wenn Sie in eine Situation geraten, in der Sie dies tun
df['time']= pd.to_datetime(df['time'])
Wirft a
ValueError:Unknown string format
Das heißt, Sie haben ungültige (nicht erzwungene) Werte. Wenn Sie damit einverstanden sind, dass sie konvertiert werden pd.NaT, können Sie ein errors='coerce'Argument hinzufügen zu to_datetime:
Hallo Leute, @AndyHayden, kannst du den Zeitteil vom Datum entfernen? Ich brauche diesen Teil nicht?
Yoshiserry
In Pandas '0.13.1 werden die nachfolgenden 00: 00: 00s nicht angezeigt.
Andy Hayden
und was ist mit in anderen Versionen, wie entfernen / und / oder zeigen wir sie nicht an?
Yoshiserry
Ich denke nicht, dass dies auf eine nette Art und Weise gemacht werden kann. Es wird diskutiert, date_format wie float_format (das Sie gesehen haben) hinzuzufügen. Ich empfehle trotzdem ein Upgrade.
Andy Hayden
Mein Problem ist, dass mein Datum in diesem Format vorliegt ... 41516.43, und ich erhalte diesen Fehler. Ich würde erwarten, dass es so etwas wie 2014-02-03 in der neuen Spalte zurückgibt?! DER FEHLER: # Datumswerte in der Spalte "load_date" in Datumsangaben konvertieren budget_dataset ['date_last_load'] = pd.to_datetime (budget_dataset ['load_date']) budget_dataset -c: 2: SettingWithCopyWarning: Ein Wert versucht, auf a gesetzt zu werden Kopie eines Slice aus einem DataFrame. Versuchen Sie stattdessen, .loc [row_index, col_indexer] = value zu verwenden
yoshiserry
35
Ich stelle mir vor, dass viele Daten aus CSV-Dateien in Pandas eingehen. In diesem Fall können Sie das Datum während des ersten CSV-Lesevorgangs einfach konvertieren:
dfcsv = pd.read_csv('xyz.csv', parse_dates=[0])Dabei bezieht sich die 0 auf die Spalte, in der sich das Datum befindet.
Sie können dort auch hinzufügen, , index_col=0wenn das Datum Ihr Index sein soll.
Beachten Sie, dass es sich bei Datetime-Objekten nicht um Pandas handelt, wenn Sie nicht die Stunde sehen, zu der alle 00:00:00 sind. Das ist ein iPython-Notebook, das versucht, die Dinge hübsch aussehen zu lassen.
Dieser funktioniert nicht für mich, er beschwert sich: Kann nur .dt Accessor mit datetimelike Werte verwenden
Smishra
1
Möglicherweise müssen Sie df[col] = pd.to_datetime(df[col])zuerst Ihre Spalte in Datums- / Uhrzeitobjekte konvertieren.
szeitlin
Das Problem bei dieser Antwort ist, dass sie die Spalte konvertiert, in dtype = objectdie erheblich mehr Speicher belegt wird als eine echte datetime dtypein Pandas.
elPastor
6
Eine andere Möglichkeit, dies zu tun, funktioniert gut, wenn Sie mehrere Spalten in datetime konvertieren müssen.
@MarkAndersen Solange Sie datenur Werte in Ihren Spalten haben, werden bei der Konvertierung in datetime nur die entsprechenden Informationen beibehalten. Wenn Sie explizit konvertieren df['datetime_col'].dt.date, wird dies zu einem objectdtype führen. Verlust in der Speicherverwaltung.
Sumanth Lazarus
4
Wenn Sie das DATE- und nicht das DATETIME-Format erhalten möchten:
Es kann vorkommen, dass Daten auf eine andere Häufigkeit umgerechnet werden müssen. In diesem Fall würde ich vorschlagen, einen Index nach Datum festzulegen.
#set an index by dates
df.set_index(['time'], drop=True, inplace=True)
Danach können Sie einfacher in das Datumsformat konvertieren, das Sie am meisten benötigen. Im Folgenden konvertiere ich nacheinander in eine Reihe von Datumsformaten, wobei ich am Anfang des Monats eine Reihe von Tagesdaten erhalte.
#Convert to daily dates
df.index = pd.DatetimeIndex(data=df.index)#Convert to monthly dates
df.index = df.index.to_period(freq='M')#Convert to strings
df.index = df.index.strftime('%Y-%m')#Convert to daily dates
df.index = pd.DatetimeIndex(data=df.index)
Der Kürze halber zeige ich nicht, dass ich nach jeder Zeile oben den folgenden Code ausführe:
Versuchen Sie, eine der Zeilen mit der Funktion pd.to_datetime in einen Zeitstempel zu konvertieren, und ordnen Sie das Formular dann mit .map der gesamten Spalte zu
df['time'] = [time.date() for time in df['time']]
Im Wesentlichen äquivalent zu @waitingkuo, aber ich würde es
to_datetime
hier verwenden (es scheint ein wenig sauberer zu sein und bietet einige zusätzliche Funktionen, z. B.dayfirst
):Handhabung
ValueError
sWenn Sie in eine Situation geraten, in der Sie dies tun
Wirft a
Das heißt, Sie haben ungültige (nicht erzwungene) Werte. Wenn Sie damit einverstanden sind, dass sie konvertiert werden
pd.NaT
, können Sie einerrors='coerce'
Argument hinzufügen zuto_datetime
:quelle
Ich stelle mir vor, dass viele Daten aus CSV-Dateien in Pandas eingehen. In diesem Fall können Sie das Datum während des ersten CSV-Lesevorgangs einfach konvertieren:
dfcsv = pd.read_csv('xyz.csv', parse_dates=[0])
Dabei bezieht sich die 0 auf die Spalte, in der sich das Datum befindet.Sie können dort auch hinzufügen,
, index_col=0
wenn das Datum Ihr Index sein soll.Siehe https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
quelle
Jetzt können Sie tun
df['column'].dt.date
Beachten Sie, dass es sich bei Datetime-Objekten nicht um Pandas handelt, wenn Sie nicht die Stunde sehen, zu der alle 00:00:00 sind. Das ist ein iPython-Notebook, das versucht, die Dinge hübsch aussehen zu lassen.
quelle
df[col] = pd.to_datetime(df[col])
zuerst Ihre Spalte in Datums- / Uhrzeitobjekte konvertieren.dtype = object
die erheblich mehr Speicher belegt wird als eine echtedatetime dtype
in Pandas.Eine andere Möglichkeit, dies zu tun, funktioniert gut, wenn Sie mehrere Spalten in datetime konvertieren müssen.
quelle
date
nur Werte in Ihren Spalten haben, werden bei der Konvertierung in datetime nur die entsprechenden Informationen beibehalten. Wenn Sie explizit konvertierendf['datetime_col'].dt.date
, wird dies zu einemobject
dtype führen. Verlust in der Speicherverwaltung.Wenn Sie das DATE- und nicht das DATETIME-Format erhalten möchten:
quelle
Es kann vorkommen, dass Daten auf eine andere Häufigkeit umgerechnet werden müssen. In diesem Fall würde ich vorschlagen, einen Index nach Datum festzulegen.
Danach können Sie einfacher in das Datumsformat konvertieren, das Sie am meisten benötigen. Im Folgenden konvertiere ich nacheinander in eine Reihe von Datumsformaten, wobei ich am Anfang des Monats eine Reihe von Tagesdaten erhalte.
Der Kürze halber zeige ich nicht, dass ich nach jeder Zeile oben den folgenden Code ausführe:
Dies gibt mir die folgende Ausgabe:
quelle
Versuchen Sie, eine der Zeilen mit der Funktion pd.to_datetime in einen Zeitstempel zu konvertieren, und ordnen Sie das Formular dann mit .map der gesamten Spalte zu
quelle
quelle