2016-04-01 1 views
4

Я пытаюсь извлечь временные метки из моего почтового ящика, чтобы генерировать статистические данные с помощью Pandas. Мой код захватывает до 1000 писем и сохраняет метки времени в списке. Затем я передаю список в pd.DataFrame, который дает мне фреймворк с столбцом типа «время».Проблема с Pandas TimeGrouper - указатель «timeerror» для Typeerror

Я хочу использовать groupby и TimeGrouper для построения количества писем по будням, времени суток и т. Д., Поэтому я устанавливаю столбец timestamp в качестве индекса, но получаю TypeError: «Действителен только с DatetimeIndex , TimedeltaIndex или PeriodIndex, но получил экземпляр «Index». Я попытался использовать to_datetime, но это порождает другой объект TypeError: тип типа «время» не имеет len(). Из того, что я могу сказать, df [0] уже является объектом datetime, так почему он бросает ошибку при попытке использовать TimeGrouper?

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' 

Edit: Добавление df.info() и 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()' и 'df.head()'? – Stefan

+0

Конечно, я редактировал свой пост, чтобы включить его. Спасибо – thobru

+0

'Индекс: 150 записей' предполагает, что ваши столбцы' index' должны быть преобразованы в 'datetime', используя' pd.to_datetime() 'first. 'df [0]' может выглядеть как 'datetime', но требует преобразования типов, try' df [0] = pd.to_datetime (df [0], format = '% m-% d-% Y% H:% M: % S ') 'перед установкой в ​​индекс. – Stefan

ответ

1

Index: 150 entries предлагает свой index столбец должен быть преобразован в datetime используя pd.to_datetime() первый.

df[0] может выглядеть datetime но нуждается преобразование типов, попробуйте

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

перед установкой индексировать.