【发布时间】:2014-10-30 03:17:59
【问题描述】:
我有一个关于如何在 pd.read_hdf 函数中过滤结果的问题。所以这是设置,我有一个 pandas 数据框(带有 np.datetime64 索引),我将它放入 hdf5 文件中。这里没有什么花哨的东西,所以没有使用层次结构或任何东西(也许我可以合并它?)。这是一个例子:
Foo Bar
TIME
2014-07-14 12:02:00 0 0
2014-07-14 12:03:00 0 0
2014-07-14 12:04:00 0 0
2014-07-14 12:05:00 0 0
2014-07-14 12:06:00 0 0
2014-07-15 12:02:00 0 0
2014-07-15 12:03:00 0 0
2014-07-15 12:04:00 0 0
2014-07-15 12:05:00 0 0
2014-07-15 12:06:00 0 0
2014-07-16 12:02:00 0 0
2014-07-16 12:03:00 0 0
2014-07-16 12:04:00 0 0
2014-07-16 12:05:00 0 0
2014-07-16 12:06:00 0 0
现在我使用以下命令将其存储到 .h5 中:
store = pd.HDFStore('qux.h5')
#generate df
store.append('data', df)
store.close()
接下来,我将有另一个进程来访问这些数据,并且我想获取这些数据的日期/时间片。因此,假设我想要 2014-07-14 和 2014-07-15 之间的日期,并且仅适用于 12:02:00 和 12:04:00 之间的时间。目前我正在使用以下命令来检索它:
pd.read_hdf('qux.h5', 'data', where='index >= 20140714 and index <= 20140715').between_time(start_time=datetime.time(12,2), end_time=datetime.time(12,4))
据我所知,如果我在这里错了,请有人纠正我,但如果我使用“where”,则不会将整个原始数据集读入内存。换句话说:
这个:
pd.read_hdf('qux.h5', 'data', where='index >= 20140714 and index <= 20140715')
和这个不一样:
pd.read_hdf('qux.h5', 'data')['20140714':'20140715']
虽然最终结果完全相同,但在后台执行的操作却不同。所以我的问题是,有没有办法将该时间范围过滤器(即 .between_time())合并到我的 where 语句中?或者如果有另一种方式我应该构建我的 hdf5 文件?也许每天存储一张桌子?
谢谢!
编辑:
关于使用层次结构,我知道结构应该高度依赖于我将如何使用数据。但是,如果我们假设 I 为每个日期定义一个表(例如 'df/date_20140714'、'df/date_20140715'、...)。在这里我可能再次弄错了,但是使用我查询日期/时间范围的示例;如果我想要一个合并的输出,我需要读取每个表并且必须合并它们,因此我可能会招致性能损失?
【问题讨论】: