Ich habe also eine Datumsspalte in meinem Datenrahmen, in der die Datumsangaben das folgende Format haben
0 1998-08-26 04:00:00
Wenn ich nur das Jahr Monat und Tag haben möchte, wie kann ich die triviale Stunde fallen lassen?
Am schnellsten geht es mit der Normalisierung von DatetimeIndex (Sie müssen die Spalte erst zu einem DatetimeIndex machen):
In [11]: df = pd.DataFrame({"t": pd.date_range('2014-01-01', periods=5, freq='H')})
In [12]: df
Out[12]:
t
0 2014-01-01 00:00:00
1 2014-01-01 01:00:00
2 2014-01-01 02:00:00
3 2014-01-01 03:00:00
4 2014-01-01 04:00:00
In [13]: pd.DatetimeIndex(df.t).normalize()
Out[13]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-01-01, ..., 2014-01-01]
Length: 5, Freq: None, Timezone: None
In [14]: df['date'] = pd.DatetimeIndex(df.t).normalize()
In [15]: df
Out[15]:
t date
0 2014-01-01 00:00:00 2014-01-01
1 2014-01-01 01:00:00 2014-01-01
2 2014-01-01 02:00:00 2014-01-01
3 2014-01-01 03:00:00 2014-01-01
4 2014-01-01 04:00:00 2014-01-01
DatetimeIndex hat auch einige andere nützliche Attribute, z. .Jahr Monat Tag.
Ab 0.15 sind sie ein dt-Attribut, sodass Sie auf dieses (und andere Methoden) zugreifen können:
df.t.dt.normalize()
# equivalent to
pd.DatetimeIndex(df.t).normalize()
Andere Option
df['my_date_column'].dt.date
Würde geben
0 2019-06-15
1 2019-06-15
2 2019-06-15
3 2019-06-15
4 2019-06-15
Eine andere Möglichkeit ist die Verwendung von str.split
df['Date'] = df['Date'].str.split(' ',expand=True)[0]
Dies sollte die Spalte 'Date' in zwei mit 0 und 1 markierte Spalten aufteilen. Verwenden Sie den Whitespace zwischen dem Datum und der Uhrzeit als Split-Indikator.
Spalte 0 des zurückgegebenen Datenrahmens enthält dann das Datum, und Spalte 1 enthält die Zeit . Dann setzt sie die Spalte 'Date' des ursprünglichen Datenrahmens auf Spalte [0], die nur das Datum sein sollte.