2015-03-16 2 views

ответ

1

Это работает, только если ваш объект является табличным форматом (а не fixed format).

In [11]: df = pd.DataFrame(np.random.randn(100, 2)) 

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

In [13]: df.to_hdf("store.h5", "df", format="table") 

In [14]: store.select("df", "index < 2") 
Out[14]: 
      0   1 
0 -0.245982 -1.047534 
1 -0.633943 -1.218812 

In [15]: pd.read_hdf("store.h5", "df", start=0, stop=2) # works if non-integer index 
Out[15]: 
      0   1 
0 -0.245982 -1.047534 
1 -0.633943 -1.218812 

Смотрите в документации table format.


Если таблица фиксированного формата может быть прочитана только в целом (но, возможно, this should raise):

In [21]: df.to_hdf("store.h5", "fixed_df", format="fixed") 

In [22]: pd.read_hdf("store.h5", "fixed_df", start=0, stop=2) 
Out[22]: 
      0   1 
0 2.532604 -0.084852 
1 0.735833 -1.100600 
2 -0.415245 -2.050627 
3 -0.915045 -0.638667 
...  # and all the other rows 
+0

Индексы в моем файле не известны. –

+0

@AlexanderSupertramp это работает (начало и остановка) с нецелым индексом. –

+0

@AlexanderSupertramp. Запустите и остановите работу для вас с помощью формата = таблицы? Используете ли вы последнюю версию панд? –

1

Это не реализована для fixed магазинов ATM (но работает table магазинах, см Ответ Энди), см. Открытый выпуск here

Тем не менее, сами магазины фактически поддерживают индексацию. Его просто не построили. Это заглядывает внутрь.

In [35]: df = DataFrame(np.random.randn(10,2),columns=list('ab')) 

In [36]: store = pd.HDFStore('test.h5',mode='w') 

In [37]: store.put('df',df) 

In [38]: store 
Out[38]: 
<class 'pandas.io.pytables.HDFStore'> 
File path: test.h5 
/df   frame  (shape->[10,2]) 

In [39]: mask = slice(4,10) 

In [40]: s = store.get_storer('df').storable 

In [41]: DataFrame(s.block0_values[mask],index=s.axis1[mask],columns=s.axis0) 
Out[41]: 
axis0   a   b 
4  -1.347325 -0.936605 
5  -0.342814 -0.452055 
6  0.951228 0.160918 
7  -0.096133 0.816032 
8  -0.731431 1.190047 
9  -1.050826 0.348107 

In [42]: store.close() 

Я полагаю, это может поднять NotImplementedError, пока эта проблема не будет решена.

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