Korzystanie pandy mogę Indeks A timeseries pomocą obiektu datetime (z miesiąc i dzień) i uzyskać wartość dla okresu, np:Tworzenie pandy timeseries z miesiąc, ale nie rok
from pandas import *
ts = TimeSeries([41,45,48],[Period('2012'),Period('2013'),Period('2014')])
print ts[datetime(2013,05,17)]
Czy istnieje w jaki sposób określić okres z miesiąca, ale bez roku? Mam średni roczny profil z częstotliwością miesięczną, że chciałbym być w stanie indeksować przez miesiąc/dzień, np:
ts = TimeSeries(range(1,13),[Period(month=n,freq='M') for n in range(1,13)])
print ts[datetime(2013,05,17)]
Przedmiotem okres nie wydaje się wspierać ten (to zgłasza błąd). Czy istnieje lepszy sposób na zrobienie tego, niż tworzenie timeseries z rokiem, a następnie modyfikowanie obiektu datetime, zanim zostanie użyty do zindeksowania timeseries?
http://pandas.pydata.org/pandas-docs/dev/timeseries.html#period
Edit 1:
Aby wyjaśnić trochę dlatego chcę, aby to zrobić: Mam model, który oblicza na dziennej kroku to. Mam zmienną w modelu, który jest obiektem datetime reprezentującym bieżący dzień. Muszę sprawdzić bieżący dzień w kilku seriach czasowych, z których niektóre mają pełną datę (rok/miesiąc/dzień), ale inne, które mają tylko miesiąc. Miałem nadzieję na coś tak bezproblemowego jak indeksowanie, ponieważ czas/profile są dostarczane przez użytkownika w czasie wykonywania. Miałem szansę na przesłonięcie metody __getitem__
obiektu TimeSeries (dzięki czemu mogłem naprawić lata za kulisami), ale wydaje się to trochę szalonym hackerem.
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' wygląda użyteczne, ale to nie jest odpowiedź na moje pytanie o tworzeniu podstawowej bez timeseries roku. – Snorfalorpagus