2015-01-25 45 views
14

Tôi có một Pandas DataFrame như sauChuyển đổi Pandas Series để DateTime trong một DataFrame

 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 là một loại loạt

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

Tôi đã thử dưới đây, nhưng nó vẫn không thay đổi loại Dòng

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

Làm thế nào tôi có thể thay đổi df.TimeReviewed để DateTime loại và kéo ra năm, tháng, ngày, giờ, phút, se c riêng biệt? Tôi rất mới mẻ với python, cảm ơn sự giúp đỡ của bạn.

Trả lời

23

Bạn không thể: DataFrame cột là Series, theo định nghĩa. Điều đó nói rằng, nếu bạn thực hiện các dtype (loại của tất cả các yếu tố) datetime-như thế nào, sau đó bạn có thể truy cập vào số lượng bạn muốn thông qua .dt accessor (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 

Nếu bạn bị mắc kẹt khi sử dụng phiên bản cũ hơn của pandas, bạn luôn có thể truy cập các phần tử khác theo cách thủ công (một lần nữa, sau khi chuyển đổi thành một chuỗi datetime-dtyped). Nó sẽ chậm hơn, nhưng đôi khi đó không phải là một vấn đề:

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

tôi không thể sử dụng '.dt' nó cho tôi một lỗi:' AttributeError: Đối tượng 'Series' không có thuộc tính 'dt'' – 1EnemyLeft

+0

@ user3596895: có thể bạn đang sử dụng phiên bản cũ hơn của gấu trúc. 'Print (pd.version.version)' cung cấp cái gì? – DSM

+0

nó mang lại cho tôi 0.14.1 – 1EnemyLeft

1

Một số kịch bản có ích:

hour = df['assess_time'].dt.hour.values[0] 
Các vấn đề liên quan