当前位置:  开发笔记 > 大数据 > 正文

pandas HDFStore按日期时间索引选择行

如何解决《pandasHDFStore按日期时间索引选择行》经验,为你挑选了1个好方法。

我确定这可能非常简单,但我无法弄清楚如何通过其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日我得到了所有东西,但是我看不出如何增加时间.



1> Jeff..:

这里的例子 需要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

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有