【发布时间】:2015-08-09 14:45:53
【问题描述】:
我有一个已写入 HDF5 文件的 pandas DataFrame。数据按时间戳索引,如下所示:
In [5]: df
Out[5]:
Codes Price Size
Time
2015-04-27 01:31:08-04:00 T 111.75 23
2015-04-27 01:31:39-04:00 T 111.80 23
2015-04-27 01:31:39-04:00 T 113.00 35
2015-04-27 01:34:14-04:00 T 113.00 85
2015-04-27 01:55:15-04:00 T 113.50 203
... ... ... ...
2015-05-26 11:35:00-04:00 CA 110.55 196
2015-05-26 11:35:00-04:00 CA 110.55 98
2015-05-26 11:35:00-04:00 CA 110.55 738
2015-05-26 11:35:00-04:00 CA 110.55 19
2015-05-26 11:37:01-04:00 110.55 12
我想要创建一个函数,我可以传递一个熊猫DatetimeIndex,它会返回一个 DataFrame,其中的行位于 DatetimeIndex 中每个时间戳之前或之前。
我遇到的问题是,如果我要查找的行数超过 30 行,则串联的 read_hdf 查询将不起作用——请参阅 [pandas read_hdf with 'where' condition limitation?
我现在正在做的是这样的,但必须有更好的解决方案:
from pandas import read_hdf, DatetimeIndex
from datetime import timedelta
import pytz
def getRows(file, dataset, index):
if len(index) == 1:
start = index.date[0]
end = (index.date + timedelta(days=1))[0]
else:
start = index.date.min()
end = (index.date.max() + timedelta(days=1))
where = '(index >= "' + str(start) + '") & (index < "' str(end) + '")'
df = read_hdf(file, dataset, where=where)
df = df.groupby(level=0).last().reindex(index, method='pad')
return df
【问题讨论】: