Python 在熊猫身上抓紧时间
熊猫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,时区:无 这是因为: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天),并根
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)