【问题标题】:HDFStore with index in epoch time具有纪元时间索引的 HDFStore
【发布时间】:2017-05-13 15:00:03
【问题描述】:

我在 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 中的索引存储为纪元时间,我如何获得相同的结果?

【问题讨论】:

    标签: python datetime pandas epoch


    【解决方案1】:

    IIUC,您应该将 startstop 时间转换为 epoch 以便能够执行查询。为此,您可以:

    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')
    

    那么就可以使用上面的方法了。

    【讨论】:

    • 这并没有给我准确的结果。有没有更简单的方法来获得 epoc 时间。例如:我有
    • 我有 abc = np.datetime64('2005-12-27 20:10:10.500400300', 'ns') ... 我怎样才能得到这个 epoc 时间?
    • 好吧,我用更多信息编辑了答案。在我看来这很简单,如果它适合你,请告诉我,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-05-19
    • 2013-05-07
    • 2011-04-27
    • 2015-02-19
    • 2019-01-25
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多