2014-10-15 4 views
1

У меня есть большое количество фреймов данных, экспортированных в серию файлов HDFStore через Pandas. Мне нужно иметь возможность быстро вытащить самую последнюю запись, для каждой из этих фреймов по запросу.Pandas HDFStore - Получить последнюю запись из нескольких таблиц

Установка:

<class 'pandas.io.pytables.HDFStore'> 
File path: /data/storage_X100.hdf 
/X1     frame_table (typ->appendable,nrows->2652,ncols->1,indexers->[index]) 
/XX     frame_table (typ->appendable,nrows->2652,ncols->3,indexers->[index]) 
/Y1     frame_table (typ->appendable,nrows->2652,ncols->2,indexers->[index]) 
/YY     frame_table (typ->appendable,nrows->2652,ncols->3,indexers->[index]) 

Я хранение примерно 100 кадров данных в каждом файле HDF, и имеет около 5000 файлов через запуск. Каждый из кадров данных в HDFStore индексируется с помощью DateTimeIndex.

Для одного файла, я в настоящее время цикл по HDFStore.keys(), а затем запрашивая dataframe с tail(1) так:

store = pandas.HDFStore(filename) 
lastrecs = {} 
for key in store.keys(): 
    last = store[key].tail(1) 
    lastrecs[key] = last 

Есть ли лучший способ сделать это, возможно, с HDFStore.select_as_multiple? Даже выбор последней записи без вытягивания всего кадра данных для хвоста, вероятно, ускорит работу. Как это может быть сделано?

ответ

2

start и/или stop, чтобы указать диапазон строк. Вам по-прежнему нужно перебирать ключи, но это будет просто выбрать последнюю строку таблицы, поэтому должно быть очень быстро.

In [1]: df = DataFrame(np.random.randn(10,5)) 

In [2]: df.to_hdf('test.h5','df',mode='w',format='table') 

In [3]: store = pd.HDFStore('test.h5') 

In [4]: store 
Out[4]: 
<class 'pandas.io.pytables.HDFStore'> 
File path: test.h5 
/df   frame_table (typ->appendable,nrows->10,ncols->5,indexers->[index]) 

In [5]: nrows = store.get_storer('df').nrows 

In [6]: nrows 
Out[6]: 10 

In [7]: store.select('df',start=nrows-1,stop=nrows) 
Out[7]: 
      0  1   2   3   4 
9 0.221869 -0.47866 1.456073 0.093266 -0.456778 

In [8]: store.close() 

Вот вопрос, используя NROWS (для различных целей) here

+0

Спасибо - старт/стоп работает намного лучше, чем делать хвост. – bazel

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