5
使用熊猫,我可以索引使用DateTime对象(与月,日)一个时间序列,并得到一个时期的值,例如:创建大熊猫时间序列用了一个月,但不是一年
from pandas import *
ts = TimeSeries([41,45,48],[Period('2012'),Period('2013'),Period('2014')])
print ts[datetime(2013,05,17)]
有任何方式来定义一个月但没有一年的时期?我有一个频率每月平均每年的个人资料,我希望能够通过指数月/日,如:月经对象似乎
ts = TimeSeries(range(1,13),[Period(month=n,freq='M') for n in range(1,13)])
print ts[datetime(2013,05,17)]
不支持这一(它抛出一个错误)。有没有更好的方法来做到这一点,而不是创建一年的时间序列,然后修改日期时间对象,然后再使用索引时间序列?
http://pandas.pydata.org/pandas-docs/dev/timeseries.html#period
编辑1:
要澄清一点,为什么我想这样做:我有计算上每天时间步长的模型。我在模型中有一个变量,它是表示当前日期的日期时间对象。我需要对几个时间序列进行检查,其中一些时间序列有一个完整的日期(年/月/日),但其他的只有一个月。我希望像索引一样无缝,因为时间序列/配置文件是在运行时由用户提供的。我已经开始重写TimeSeries对象的__getitem__
方法(这样我就可以修复幕后的几年),但它似乎有点疯狂。
from pandas import *
class TimeSeriesProfile(TimeSeries):
year = 2004
def __new__(self, *args, **kwargs):
inst = TimeSeries.__new__(self, *args, **kwargs)
inst.index = period_range(str(self.year)+str(inst.index[0])[4:], periods=len(inst.index), freq=inst.index.freq)
return inst.view(TimeSeriesProfile)
def __getitem__(self, key):
without_year = datetime(self.year, key.month, key.day, key.hour, key.minute, key.second)
return TimeSeries.__getitem__(self, without_year)
ts = TimeSeriesProfile(range(0, 366), period_range('1996-01-01', periods=366, freq='D'))
print ts[datetime(2008, 02, 29)]
'period_range'看起来有用,但它并没有回答我的问题,根本没有关于每年产生的时间序列。 – Snorfalorpagus