具有纪元时间索引的 HDFStore
HDFStore with index in epoch time
我在 HDFStore 中有 pandas 数据帧,索引存储为纪元时间。我想读取数据并根据特定索引进行查询。
例如 - 如果我在 datetime64[ns] 而不是 epoc 中有索引,我可以获得如下结果:
starttime = datetime.datetime(2008,12,22,00,19,55,150000)
start = pd.Timestamp(stoptime) + pd.Timedelta(1)
stoptime = datetime.datetime(2008,12,22,00,55,55,180000)
stop = pd.Timestamp(starttime) + pd.Timedelta(1)
pd.read_hdf('file.h5',columns=['Data','Qty'],where='index > start & index < stop']
如果 HDFStore 中的索引存储为纪元时间,我如何获得相同的结果?
IIUC,您应该将 start
和 stop
时间转换为纪元才能执行查询。为此,您可以:
start_epoch = (start - datetime.datetime(1970,1,1)).total_seconds()
stop_epoch = (stop - datetime.datetime(1970,1,1)).total_seconds()
那么您应该可以使用它们执行查询。使用您的数据:
In [24]: (start - datetime.datetime(1970,1,1)).total_seconds()
Out[24]: 1229905195.15
In [27]: (stop - datetime.datetime(1970,1,1)).total_seconds()
Out[27]: 1229907355.18
编辑:更普遍的问题。如果是 numpy datetime64
对象,您可以先将其转换为普通 datetime
:
In [16]: abc = np.datetime64('2005-12-27 20:10:10.500400300', 'ns')
In [17]: a = pd.to_datetime(abc)
In [18]: a
Out[18]: Timestamp('2005-12-27 20:10:10.500400300')
那么就可以使用上面的方法了
我在 HDFStore 中有 pandas 数据帧,索引存储为纪元时间。我想读取数据并根据特定索引进行查询。
例如 - 如果我在 datetime64[ns] 而不是 epoc 中有索引,我可以获得如下结果:
starttime = datetime.datetime(2008,12,22,00,19,55,150000)
start = pd.Timestamp(stoptime) + pd.Timedelta(1)
stoptime = datetime.datetime(2008,12,22,00,55,55,180000)
stop = pd.Timestamp(starttime) + pd.Timedelta(1)
pd.read_hdf('file.h5',columns=['Data','Qty'],where='index > start & index < stop']
如果 HDFStore 中的索引存储为纪元时间,我如何获得相同的结果?
IIUC,您应该将 start
和 stop
时间转换为纪元才能执行查询。为此,您可以:
start_epoch = (start - datetime.datetime(1970,1,1)).total_seconds()
stop_epoch = (stop - datetime.datetime(1970,1,1)).total_seconds()
那么您应该可以使用它们执行查询。使用您的数据:
In [24]: (start - datetime.datetime(1970,1,1)).total_seconds()
Out[24]: 1229905195.15
In [27]: (stop - datetime.datetime(1970,1,1)).total_seconds()
Out[27]: 1229907355.18
编辑:更普遍的问题。如果是 numpy datetime64
对象,您可以先将其转换为普通 datetime
:
In [16]: abc = np.datetime64('2005-12-27 20:10:10.500400300', 'ns')
In [17]: a = pd.to_datetime(abc)
In [18]: a
Out[18]: Timestamp('2005-12-27 20:10:10.500400300')
那么就可以使用上面的方法了