2015-01-25 14 views
14

ich Pandas Datenrahmen haben, wie untenkonvertieren Pandas Series Datetime in einem Datenrahmen

 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 ist eine Serie Typ

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

ich unten habe versucht, aber es funktioniert immer noch nicht ändern die Serie Typ

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

Wie kann ich die df.TimeReviewed zu Datetime-Typ ändern und ziehen Sie Jahr, Monat, Tag, Stunde, Minute, se c getrennt? Ich bin etwas neu zu Python, danke für Ihre Hilfe.

Antwort

23

Sie können nicht: DataFrame Spalten sind per Definition Series. Das heißt, wenn Sie die dtype (die Art aller Elemente) Datetime-like machen, dann können Sie die Mengen gelangen Sie über die .dt Accessor wollen (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 

Wenn Sie Stuck mit einer älteren Version von pandas, können Sie immer auf die verschiedenen Elemente manuell zugreifen (wieder nach dem Konvertieren in eine Datetime-dtyped Series). Es wird langsamer sein, aber manchmal ist das kein Problem:

>>> 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 
+0

ich nicht nutzen konnte '.dt' es mir eine Fehlermeldung geben:' Attribute: 'Series' Objekt hat kein Attribut 'dt'' – 1EnemyLeft

+0

@ user3596895: Sie verwenden wahrscheinlich eine ältere Version von Pandas. Was gibt 'print (pd.version.version)'? – DSM

+0

es gibt mir 0.14.1 – 1EnemyLeft

1

Einige handliches Skript:

hour = df['assess_time'].dt.hour.values[0] 
Verwandte Themen