2016-12-29 2 views
1

У меня есть рамка данных панд в HDFStore с индексом, хранящимся как время эпохи. Я хочу прочитать данные и запрос на основе определенного индекса.HDFStore с индексом в эпоху

Например - если у меня есть индекс в datetime64 [нс] вместо EPOC, я может получить результат в виде:

starttime = datetime.datetime(2008,12,22,00,19,55,150000) 

start = pd.Timestamp(stoptime) + pd.Timedelta(1) 

stoptime = datetime.datetime(2008,12,22,00,55,55,180000) 

stop = pd.Timestamp(starttime) + pd.Timedelta(1) 

pd.read_hdf('file.h5',columns=['Data','Qty'],where='index > start & index < stop'] 

Как можно достичь того же результата, если индекс в HDFStore сохраняется как время эпохи ?

ответ

0

IIUC, вы должны конвертировать start и stop раз в эпоху, чтобы быть в состоянии выполнить запрос. Для этого вы можете:

start_epoch = (start - datetime.datetime(1970,1,1)).total_seconds() 
stop_epoch = (stop - datetime.datetime(1970,1,1)).total_seconds() 

Тогда вы должны быть в состоянии выполнить запрос с ними. Используя ваши данные:

In [24]: (start - datetime.datetime(1970,1,1)).total_seconds() 
Out[24]: 1229905195.15 

In [27]: (stop - datetime.datetime(1970,1,1)).total_seconds() 
Out[27]: 1229907355.18 

EDIT: более общие вопросы. В случае Numpy datetime64 объекта вы можете сначала преобразовать его в обычный datetime:

In [16]: abc = np.datetime64('2005-12-27 20:10:10.500400300', 'ns') 

In [17]: a = pd.to_datetime(abc) 

In [18]: a 
Out[18]: Timestamp('2005-12-27 20:10:10.500400300') 

Затем вы можете использовать вышеупомянутый метод.

+0

Это не дает мне точного результата. Есть ли более простой способ получить время эпохи. Например: у меня есть – Sun

+0

У меня есть abc = np.datetime64 ('2005-12-27 20: 10: 10.500400300', 'ns') ... Как я могу получить время epoc для этого? – Sun

+0

Ну, я отредактировал ответ с дополнительной информацией. Это кажется мне довольно простым, дайте мне знать, если это сработает для вас, спасибо! –

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