2012-07-17 58 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) 

在你的情況,你可以做一些類似製作一個偏移對象的東西。