1

月の時系列があり、月が欠落している可能性があり、DatetimeIndexを使用してデータをpandas Seriesオブジェクトにロードするときに、各日付の観測値が月末の日付としてラベル付けされていることを確認するとします。ただし、生の入力日は月のどこかにある可能性があるため、月末の観測を強制する必要があります。

私の最初の考えは、次のようなことをすることでした。

import pandas as pd
pd.DatetimeIndex([datetime(2012,1,20), datetime(2012,7,31)], freq='M')

ただし、これは日付を[2012-01-20,2012-07-31]のままにし、月末の値[2012-01-31,2012-07-31]に強制することはありません。

私の2番目の試みは:

ix = pd.DatetimeIndex([datetime(2012,1,20), datetime(2012,7,31)], freq='M')
s = pd.Series(np.random.randn(len(ix)), index=ix)
s.asfreq('M')

しかし、これは次のようになります。

2012-01-31        NaN
2012-02-29        NaN
2012-03-31        NaN
2012-04-30        NaN
2012-05-31        NaN
2012-06-30        NaN
2012-07-31    0.79173
Freq: M

内部的には、関数はDatetimeIndexasfreqを呼び出しています。date_range

この問題は、 ;PeriodIndexの代わりに使用すると簡単に解決できます。DatetimeIndexただし、現在サポートされていないいくつかの周波数をサポートする必要があります。PeriodIndex私が知る限り、パンダを自分のPeriod周波数で拡張する方法はありません。

4

1 に答える 1

1

これは回避策ですが、使用しなくても機能しperiodindexます:

from pandas.tseries.offsets import *

In [164]: s
Out[164]: 
2012-01-20   -1.266376
2012-07-31   -0.865573

In [165]: s.index=s.index+MonthEnd(n=0)

In [166]: s
Out[166]: 
2012-01-31   -1.266376
2012-07-31   -0.865573
于 2012-10-22T19:35:51.353 に答える