2016-01-28 7 views
0

Я создал DataFrame с датой и столбцом с указанием количества минут, которое представляет из-за «эпохи», которую я определил как 1 января 1900 00:00. Здесь меня интересует только точность минутного уровня.DateOffset с меткой времени pandas с ошибкой

from pandas.tseries.offsets import * 

    df = pd.DataFrame([pd.Timestamp('1900-01-01 00:00:00.000000'), 
       pd.Timestamp('1900-01-01 00:01:00.000000'), 
       pd.Timestamp('1900-01-01 00:02:00.000000'),], 
       columns=['datetimeinput']) 

Это хорошо работает, с функцией

def MinsSince1900(dt): 
     epoch = pd.Timestamp('1900-01-01 00:00:00.000000') 
     elapsedmins = (dt - epoch).astype('timedelta64[m]') 
     return elapsedmins 

и я могу получить столбец timekey обратно в 0, 1, 2-х минут с начала эпохи, с:

df.loc[:,'timekey']= MinsSince1900(df['datetimeinput']) 

Однако , когда я попытаюсь обратить вспять этот процесс и перевести временной ключ на время со следующей функцией:

def CreateTimefromKey(t): 
     x=pd.Timestamp('1900-01-01 00:00:00.000000') + DateOffset(minutes=t) 
     y = x.to_datetime() 
     return y 

Я получаю сообщение об ошибке

TypeError: unsupported type for timedelta minutes component: Series 

Я явно делаю что-то здесь со смещением, метки времени и серии. Но я подумал, что если это сработает, я могу изменить процесс.

Если кто-то может указать, где я неправильно, я был бы очень благодарен, спасибо

ответ

1

Вы можете добавить серию timedelta64[ns] с к epoch (панды Timestamp):

import pandas as pd 
df = pd.DataFrame([pd.Timestamp('1900-01-01 00:00:00.000000'), 
      pd.Timestamp('1900-01-01 00:01:00.000000'), 
      pd.Timestamp('1900-01-01 00:02:00.000000'),], 
      columns=['datetimeinput']) 
epoch = pd.Timestamp('1900-01-01 00:00:00.000000') 
df['timekey'] = (df['datetimeinput'] - epoch)/pd.Timedelta(minutes=1) 
df['date'] = pd.to_timedelta(df['timekey'], unit='m') + epoch 

дает

 datetimeinput timekey    date 
0 1900-01-01 00:00:00  0 1900-01-01 00:00:00 
1 1900-01-01 00:01:00  1 1900-01-01 00:01:00 
2 1900-01-01 00:02:00  2 1900-01-01 00:02:00 
+0

Это действительно помогает - спасибо за быстрый ответ! –

Смежные вопросы