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.
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
Un script pratique:
hour = df['assess_time'].dt.hour.values[0]