2012-10-22 4 views
1

개월이 누락 된 월간 시계열이 있고 DatetimeIndex가 포함 된 팬더 시리즈 개체에 데이터를로드 할 때 각 날짜 관찰이 월말 날짜. 그러나 원시 입력 날짜는 한 달에 어느 위치 에나있을 수 있으므로 우리는 월말 관측을하도록 강요해야합니다. [2012-01-20,2012-07-31]과 종료를 강제하지 않는팬더의 특정 빈도에 맞도록 날짜 강제 적용

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

그러나, 이것은 단지 날짜를 잎 :

내 첫번째 생각은 이런 일을 할 수 있었다 -of-month values ​​[2012-01-31,2012-07-31].

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 

asfreq 함수는 DatetimeIndex에 대한 date_range를 호출 후드 아래로.

대신 PeriodIndex을 사용하면이 문제가 쉽게 해결됩니다. 그러나 현재 PeriodIndex으로 지원되지 않는 주파수를 지원해야하며 자신의 Period 주파수로 팬더를 확장 할 수있는 방법이 없다는 것을 알고 있어야합니다.

+0

당신이 정확하게 출력 하시겠습니까? – root

+0

2012-01-31 및 2012-07-31에 대한 항목 만 필요합니다. 그러나 NaN 대신 2012-01-31 값은 2012-01-20에 제공된 값이어야합니다. – Abiel

답변

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 
+0

고마워, 그거야. 비슷한 것을 시도했지만 MonthEnd에 n = 0 인수를 사용하지 않을 생각이었습니다.이 경우 필수적입니다. – Abiel

+1

's = s.resample ('M', fill_method = 'ffill')' –