我确定这可能非常简单,但我无法弄清楚如何通过其datetime索引切片pandas HDFStore表来获取特定的行范围.
我有一个看起来像这样的表:
mdstore = pd.HDFStore(store.h5) histTable = '/ES_USD20120615_MIDPOINT30s' print(mdstore[histTable]) open high low close volume WAP \ date 2011-12-04 23:00:00 1266.000 1266.000 1266.000 1266.000 -1 -1 2011-12-04 23:00:30 1266.000 1272.375 1240.625 1240.875 -1 -1 2011-12-04 23:01:00 1240.875 1242.250 1240.500 1242.125 -1 -1 ... [488000 rows x 7 columns]
例如,我想从2012-01-11 23:00:00到2012-01-12 22:30:00获取范围.如果它是在df我只会使用日期时间来切片索引,但我无法弄清楚如何直接从存储表中执行此操作,因此我不必将整个内容加载到内存中.我尝试了,mdstore.select(histTable, where='index>20120111')
并且在11日和12日我得到了所有东西,但是我看不出如何增加时间.
这里的例子 需要pandas> = 0.13.0
In [2]: df = DataFrame(np.random.randn(5),index=date_range('20130101 09:00:00',periods=5,freq='s')) In [3]: df Out[3]: 0 2013-01-01 09:00:00 -0.110577 2013-01-01 09:00:01 -0.420989 2013-01-01 09:00:02 0.656626 2013-01-01 09:00:03 -0.350615 2013-01-01 09:00:04 -0.830469 [5 rows x 1 columns] In [4]: df.to_hdf('test.h5','data',mode='w',format='table')
将其指定为带引号的字符串
In [8]: pd.read_hdf('test.h5','data',where='index>"20130101 09:00:01" & index<"20130101 09:00:04"') Out[8]: 0 2013-01-01 09:00:02 0.656626 2013-01-01 09:00:03 -0.350615 [2 rows x 1 columns]
您也可以将其直接指定为时间戳
In [10]: pd.read_hdf('test.h5','data',where='index>Timestamp("20130101 09:00:01") & index