Sie können direkt auf die Jahr
und Monat
Attribute zugreifen oder ein datetime.datetime
anfordern:
In [15]: t = pandas.tslib.Timestamp.now()
In [16]: t
Out[16]: Timestamp('2014-08-05 14:49:39.643701', tz=None)
In [17]: t.to_pydatetime() #datetime method is deprecated
Out[17]: datetime.datetime(2014, 8, 5, 14, 49, 39, 643701)
In [18]: t.day
Out[18]: 5
In [19]: t.month
Out[19]: 8
In [20]: t.year
Out[20]: 2014
Eine Möglichkeit, Jahr und Monat zu kombinieren, besteht darin, sie als Ganzzahl zu kodieren, z. B. 201408
für August 2014. Für eine ganze Spalte könnten Sie dies wie folgt tun:
df['YearMonth'] = df['ArrivalDate'].map(lambda x: 100*x.year + x.month)
oder viele Varianten davon.
Allerdings bin ich kein großer Fan davon, da dies das spätere Ausrichten und Rechnen von Daten schmerzhaft macht und insbesondere für andere, die auf Ihren Code oder Ihre Daten stoßen, ohne diese gleiche Konvention, sehr schmerzhaft wird. Ein besserer Weg ist es, eine Tageskonvention, wie z.B. den letzten Nicht-US-Feiertag-Wochentag oder den ersten Tag etc. auszuwählen, und die Daten in einem Datum-/Zeitformat mit der gewählten Datumskonvention zu belassen.
Das calendar
Modul ist nützlich, um den Zahlwert bestimmter Tage wie den letzten Wochentag zu erhalten. Dann könnten Sie etwas Ähnliches tun wie:
import calendar
import datetime
df['AdjustedDateToEndOfMonth'] = df['ArrivalDate'].map(
lambda x: datetime.datetime(
x.year,
x.month,
max(calendar.monthcalendar(x.year, x.month)[-1][:5])
)
)
Wenn Sie zufällig nach einer Möglichkeit suchen, das einfachere Problem zu lösen, die Datums-/Uhrzeitspalte in eine stringähnliche Darstellung zu formatieren, können Sie dafür einfach die strftime
Funktion aus der datetime.datetime
Klasse verwenden, so wie hier:
In [5]: df
Out[5]:
date_time
0 2014-10-17 22:00:03
In [6]: df.date_time
Out[6]:
0 2014-10-17 22:00:03
Name: date_time, dtype: datetime64[ns]
In [7]: df.date_time.map(lambda x: x.strftime('%Y-%m-%d'))
Out[7]:
0 2014-10-17
Name: date_time, dtype: object