Python 在熊猫身上抓紧时间

Python 在熊猫身上抓紧时间,python,pandas,time-series,Python,Pandas,Time Series,熊猫0.8.0 [2010-01-01 01:00:05, ..., 2010-01-01 07:00:05] 长度:3,频率:3小时,时区:无 [2010-01-01 01:00:05, ..., 2010-01-01 07:00:05] 长度:3,频率:H,时区:无 这是因为: h.onOffset(times[0]) 真的 我猜这个功能相当新,似乎没有太多文档记录 rollforward和rollback方法完全按照您的预期执行: 我更大的目标是使用2个频率(例如4小时和1天),并根

熊猫0.8.0

[2010-01-01 01:00:05, ..., 2010-01-01 07:00:05] 长度:3,频率:3小时,时区:无

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

这是因为:

h.onOffset(times[0])
真的

我猜这个功能相当新,似乎没有太多文档记录

rollforward和rollback方法完全按照您的预期执行:

我更大的目标是使用2个频率(例如4小时和1天),并根据第一个频率乘以第二个频率(例如7:05:33->1,19:59:59->4,21:44:00->5)设置一系列时间戳。

小时日期偏移量是“每小时”而不是“每小时”。 您可以尝试子类化Hour来覆盖onOffset。
您还可以签出TimeSeries.between_time方法。

我需要类似的东西,下面是我捕捉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)

在你的例子中,你可以做一些类似于制作偏移对象的事情。

我不知道,但我只想说这是有史以来听上去最好的问题标题。
h.onOffset(times[0])
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)