web-dev-qa-db-fra.com

Convertir une série de Pandas en DateTime dans un DataFrame

J'ai un DataFrame Pandas comme ci-dessous 

        ReviewID       ID      Type               TimeReviewed
205     76032930  51936827  ReportID 2015-01-15 00:05:27.513000
232     76032930  51936854  ReportID 2015-01-15 00:06:46.703000
233     76032930  51936855  ReportID 2015-01-15 00:06:56.707000
413     76032930  51937035  ReportID 2015-01-15 00:14:24.957000
565     76032930  51937188  ReportID 2015-01-15 00:23:07.220000

>>> type(df)
<class 'pandas.core.frame.DataFrame'>

TimeReviewed est un type de série 

>>> type(df.TimeReviewed)
<class 'pandas.core.series.Series'>

J'ai essayé ci-dessous, mais cela ne change toujours pas le type de série 

import pandas as pd
review = pd.to_datetime(pd.Series(df.TimeReviewed))
>>> type(review)
<class 'pandas.core.series.Series'>

Comment puis-je changer le type df.TimeReviewed en type DateTime et extraire séparément année, mois, jour, heure, minute, minute? Je suis un peu nouveau sur Python, merci pour votre aide. 

23
1EnemyLeft

Vous ne pouvez pas: Les colonnes DataFrame sont Series, par définition. Cela dit, si vous définissez la dtype (le type de tous les éléments) semblable à la date/heure, vous pouvez accéder aux quantités souhaitées via l’accesseur .dt ( - docs ):

>>> df["TimeReviewed"] = pd.to_datetime(df["TimeReviewed"])
>>> df["TimeReviewed"]
205  76032930   2015-01-24 00:05:27.513000
232  76032930   2015-01-24 00:06:46.703000
233  76032930   2015-01-24 00:06:56.707000
413  76032930   2015-01-24 00:14:24.957000
565  76032930   2015-01-24 00:23:07.220000
Name: TimeReviewed, dtype: datetime64[ns]
>>> df["TimeReviewed"].dt
<pandas.tseries.common.DatetimeProperties object at 0xb10da60c>
>>> df["TimeReviewed"].dt.year
205  76032930    2015
232  76032930    2015
233  76032930    2015
413  76032930    2015
565  76032930    2015
dtype: int64
>>> df["TimeReviewed"].dt.month
205  76032930    1
232  76032930    1
233  76032930    1
413  76032930    1
565  76032930    1
dtype: int64
>>> df["TimeReviewed"].dt.minute
205  76032930     5
232  76032930     6
233  76032930     6
413  76032930    14
565  76032930    23
dtype: int64

Si vous utilisez une ancienne version de pandas, vous pouvez toujours accéder aux divers éléments manuellement (encore une fois, après l'avoir convertie en une série datetime-dtyped). Ce sera plus lent, mais parfois ce n'est pas un problème:

>>> df["TimeReviewed"].apply(lambda x: x.year)
205  76032930    2015
232  76032930    2015
233  76032930    2015
413  76032930    2015
565  76032930    2015
Name: TimeReviewed, dtype: int64
41
DSM

Un script pratique:

hour = df['assess_time'].dt.hour.values[0]
1
CodeFarmer