2016-04-01 11 views
4

Panda'larla bazı istatistikler oluşturmak için gelen kutumdan zaman damgalarını çıkarmaya çalışıyorum. Kodum 1000 e-postaya ulaşıyor ve zaman damgalarını bir listede saklıyor. Daha sonra listeyi "time" türünde bir sütunu içeren bir dataframe veren pd.DataFrame öğesine iletiyorum.Pandas TimeGrouper issue - "time" dizininde Typeerror

Hafta içi güne, günün saatine göre e-posta sayısını sıralamak için groupby ve TimeGrouper'ı kullanmak istiyorum, bu nedenle zaman damgası sütunumu dizin olarak ayarladım, ancak TypeError'ı alıyorum: "Yalnızca DatetimeIndex ile geçerli , TimedeltaIndex veya PeriodIndex, ancak bir 'Index' örneğini aldım. To_dat saatini kullanmayı denedim, ancak başka bir TypeError: type 'time' nesnesi oluşturmuyor. Df [0] zaten bir datetime nesnesi olduğunu söyleyebilirim, o zaman TimeGrouper kullanmaya çalışırken neden bir hata atıyor?

import win32com.client 
import pandas as pd 
import numpy as np 

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") 
inbox = outlook.GetDefaultFolder(6)        
messages = inbox.Items 
message = messages.GetLast() 
timesReceived = [message.SentOn] 

for i in range(1000): 
    try: 
     message = messages.GetPrevious() 
     timesReceived.append(message.SentOn) 
    except(AttributeError): 
     break 

df = pd.DataFrame(timesReceived); 
df.set_index(df[0],inplace=True) 
grouped = df.groupby(pd.TimeGrouper('M')) 


TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index' 

Düzenleme: Ekleme df.info() ve df.head()

df.info() 
<class 'pandas.core.frame.DataFrame'> 
Index: 150 entries, 04/01/16 09:37:07 to 02/11/16 17:40:56 
Data columns (total 1 columns): 
0 150 non-null object 
dtypes: object(1) 
memory usage: 2.3+ KB 

df.head() 
    0 
0 
04/01/16 09:37:07 04/01/16 09:37:07 
04/01/16 04:34:30 04/01/16 04:34:30 
04/01/16 03:02:14 04/01/16 03:02:14 
04/01/16 02:15:12 04/01/16 02:15:12 
04/01/16 00:16:27 04/01/16 00:16:27 
+0

“df.info()” ve “df.head()') çıktılarını paylaşır mısınız? – Stefan

+0

Elbette, gönderimi dahil etmek üzere düzenledim. Teşekkürler: – thobru

+0

'Dizin: 150 girdiler,' index' sütunlarınızın 'pd.to_datetime()' kullanarak ilk olarak 'datetime'na dönüştürülmesini önerir. df [0] 'datetime' gibi görünebilir, ancak tür dönüşümüne ihtiyaç duyar, 'df [0] = pd.to_datetime (df [0], format ='% m-% d-% Y% H:% M: Dizine ayarlanmadan önce% S '). – Stefan

cevap

1

Index: 150 entries sizin index sütunu anlaşılacağı pd.to_datetime() birinci kullanılarak datetime dönüştürülmesi gerekmektedir.

df[0]

datetime benziyor ama tip dönüşüm ihtiyacı indeksine ayarlamadan önce

df[0] = pd.to_datetime(df[0], format='%m/%d/%Y %H:%M:%S') 

deneyebilirsiniz.