2013-05-28 11 views
5

使用パンダ私は(月と日付)datetimeオブジェクトを使用して時系列と期間の値を取得し、例えばインデックスすることができます作成パンダの時系列

from pandas import * 
ts = TimeSeries([41,45,48],[Period('2012'),Period('2013'),Period('2014')]) 
print ts[datetime(2013,05,17)] 

があります1か月で期間を定義する方法はありますか?私は例えば、私が月/日で、インデックスのことができるようにしたいことを、毎月の頻度で、年間平均プロファイルを持っている:

ts = TimeSeries(range(1,13),[Period(month=n,freq='M') for n in range(1,13)]) 
print ts[datetime(2013,05,17)] 

期間オブジェクトがこれをサポートしていないようだ(それがエラーをスローします)。これを行うより良い方法は、timeseriesを1年で作成してからtimesetimeオブジェクトのインデックスを作成する前にdatetimeオブジェクトを変更することですか?

http://pandas.pydata.org/pandas-docs/dev/timeseries.html#period

編集1:私は、毎日のタイムステップで計算モデルを持っている:私はこれをしたい理由

が少し明確にします。現在の日を表すdatetimeオブジェクトであるモデルに変数があります。私はいくつかのtimeseries、いくつかの完全な日付(年/月/日)を持っているが、今月だけを持っている他のものに対して、現在の日をチェックする必要があります。私はtimeseries/profilesが実行時にユーザによって提供されるので、索引付けと同じようにシームレスに何かを望んでいました。私は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)] 

答えて

1

period_rangeをお試しください:

In [65]: TimeSeries(range(1, 13), period_range('2013-01', periods=12, freq='M')) 
Out[65]: 
2013-01  1 
2013-02  2 
2013-03  3 
2013-04  4 
2013-05  5 
2013-06  6 
2013-07  7 
2013-08  8 
2013-09  9 
2013-10 10 
2013-11 11 
2013-12 12 
Freq: M, dtype: int64 
+5

'period_range'が便利に見えるが、それは年なしに時系列の作成についての私の基本的な質問に答えていません。 – Snorfalorpagus

関連する問題