2012-07-17 79 views
3

随着大熊猫0.8.0捕捉到小时大熊猫

import pandas 
import pandas.tseries.offsets 
h = pandas.tseries.offsets.Hour() 
times = pandas.date_range(start='2010-1-1 1:00:05', periods=3, freq='3H') 
times 

[2010-01-01 1时00分05秒,... 2010-01-01 07:00 :05] 长度:3,频率:3H,时区:无

times.snap(h) 

[2010-01-01 1时00分05秒,..., 2010-01-01 7时00分05秒] 长度:3,频率:H,时区:无

这是因为:

h.onOffset(times[0]) 

我假设这个功能非常新颖,它似乎没有多少文件记录。

前滚和回滚方法不正是你所期待的:

我更大的目标在这里使用两个频率(例如,4小时,1天)和瓢泼大雨基于第一系列时间戳(例如7:05:33→1,19:59:59→4,21:44:00→5)

+1

我不知道,但我只是想说这是迄今为止最好的冠冕堂皇的问题标题。 – Owen 2012-07-17 02:37:13

回答

0

小时日期偏移是“每小时”而不是“每小时”在一小时内“。 您可以尝试继承小时以覆盖onOffset。 您也可以检出TimeSeries.between_time方法。

1

我需要类似的东西,这是我实现抢购30秒数据:

import pandas as pd 
from pandas.tseries.offsets import Tick 
from pandas.tslib import Timedelta 


class HalfMinute(Tick): 
    _inc = Timedelta(seconds=30) 

    def _snap_delta(self, dt): 
     d = Timedelta(seconds=dt.second, microseconds=dt.microsecond) 
     if d >= self._inc: 
      d -= self._inc 
     return d 

    def onOffset(self, dt): 
     return not self._snap_delta(dt) 

    def rollforward(self, dt): 
     return dt + (self._inc - self._snap_delta(dt)) 

    def rollback(self, dt): 
     return dt - self._snap_delta(dt) 


def test_snap(): 
    from random import random 
    from datetime import timedelta 
    # 1 hour of test data 
    grid_index = pd.date_range('2015-09-09 00:00:00', '2015-09-09 01:00:00', freq='30S') 

    # add uniform noise of maximum +-5 seconds 
    mess_index = pd.Index(dt + timedelta(seconds=(random() - 0.5) * 10) 
          for dt in grid_index) 

    snapped_index = mess_index.snap(HalfMinute()) 

    assert snapped_index.equals(grid_index) 

在你的情况,你可以做一些类似制作一个偏移对象的东西。