web-dev-qa-db-fra.com

Chute du temps de datetime <[M8] dans les pandas

J'ai donc une colonne "Date" dans mon cadre de données où les dates ont le format suivant:

0    1998-08-26 04:00:00 

Si je veux seulement l'année mois et le jour, comment puis-je laisser tomber l'heure triviale?

24
user2926266

Le moyen le plus rapide est d'utiliser la normalisation de DatetimeIndex (vous devez d'abord transformer la colonne en DatetimeIndex):

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 possède également d'autres attributs utiles, par exemple. .année mois jour.


À partir de 0,15, ils seront un attribut dt, vous pouvez donc accéder à cela (et à d'autres méthodes) avec:

df.t.dt.normalize()
# equivalent to
pd.DatetimeIndex(df.t).normalize()
32
Andy Hayden

Une autre possibilité est d'utiliser str.split

df['Date'] = df['Date'].str.split(' ',expand=True)[0]

Cela devrait fractionner la colonne "Date" en deux colonnes marquées 0 et 1. Utiliser les espaces blancs entre la date et l'heure comme indicateur de division.

La colonne 0 du cadre de données renvoyé inclut ensuite la date, et la colonne 1 indique l'heure ..__, puis définit la colonne "Date" de votre cadre de données d'origine sur la colonne [0], qui ne doit être que la date.

0