2016-08-04 12 views
2

Derzeit sind meine Daten als Zeichenfolge formatiert. Ich konnte die Zeichenfolge Datum Zeit konvertierte erhalten mit dem folgenden:Pandas Datetime-Formatierung

df['submitted_on'] = df['submitted_on'].apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f')) 

Ich mag den Zeitstempel entfernen, aber ich habe eine furchtbar schwierige Zeit zu tun. Mein bevorzugtes Format ist %Y%m%d. Also bin ich auf THIS Seite gestoßen und habe .date() hinzugefügt. Was unter:

df['submitted_on'] = df['submitted_on'].apply(lambda x: dt.datetime.strptime(x, '%Y%m%d').date()) 

ich diesen Wert Störung erhalten und ich bin wieder verloren, was den Zeitstempel zu tun, um zu fallen. Jede Hilfe wird sehr geschätzt.

ValueError: time data '2015-02-26 16:45:36.0' does not match format '%Y%m%d'

+0

Bitte post ein Beispiel DataFrame. – Alex

Antwort

1
s = pd.Series(['2010-01-01 10:00', '2010-06-01 11:00']) 

pd.to_datetime(pd.to_datetime(s).dt.date) 
2

Sie können normalize (docs) verwenden.

dti = pd.DatetimeIndex(start='today', periods=4, freq='D') 
dti 

Ausgänge

DatetimeIndex(['2016-08-04 14:30:34.447589', '2016-08-05 14:30:34.447589', 
       '2016-08-06 14:30:34.447589', '2016-08-07 14:30:34.447589'], 
       dtype='datetime64[ns]', freq='D') 

Und

dti.normalize() 

Ausgänge

DatetimeIndex(['2016-08-04', '2016-08-05', '2016-08-06', '2016-08-07'], dtype='datetime64[ns]', freq='D') 

Wenn es sich um eine Serie von Zeitmarken ist man sie mit Karte umwandeln kann.

Edit: @ piRSquared ist in diesem Fall besser.

pd.to_datetime(dti).map(lambda dt: dt.date()) 

Ausgänge

array([datetime.date(2016, 8, 4), datetime.date(2016, 8, 5), 
     datetime.date(2016, 8, 6), datetime.date(2016, 8, 7)], dtype=object) 
+0

Danke Alex. Ist es praktisch, dti.normalize() auf meinen gesamten Datenrahmen anzuwenden oder sollte ich nur datetime-Spalten normalisieren? – anshanno

2

Sie das Timestamp Objekt datetime.datetime Objekt umwandeln könnte und die datetime.date Teil extrahieren, wie gezeigt:

In [7]: import pandas as pd 

In [8]: print(pd.Timestamp('2015-02-26 16:45:36.0').to_datetime().date()) 
2015-02-26 
<class 'datetime.date'> 

Ihr gewünschtes Format:

In [11]: print(pd.Timestamp('2015-02-26 16:45:36.0').to_datetime().date().strftime("%Y%m%d")) 
20150226 
<class 'str'>