2012-10-22 5 views
14

팬더를 사용하고 있습니다. 팬더를 사용하여 시작일과 종료일 사이에 영업일을 얻는 가장 쉬운 방법이 궁금합니다.팬더를 사용하여 시작일과 종료일의 영업일을 확인하십시오

Python (example)에서이 작업을 수행하는 것과 관련하여 많은 게시물이 있지만 판다 (pandas)가 아마도 이것을 매우 쉽게 처리 할 수 ​​있다고 생각하기 때문에 팬더를 직접 사용하는 데 관심이 있습니다.

답변

11

범위의 영업일을 얻으려면 BDay()을 사용하십시오. 슬라이스와

from pandas.tseries.offsets import * 

In [185]: s 
Out[185]: 
2011-01-01 -0.011629 
2011-01-02 -0.089666 
2011-01-03 -1.314430 
2011-01-04 -1.867307 
2011-01-05 0.779609 
2011-01-06 0.588950 
2011-01-07 -2.505803 
2011-01-08 0.800262 
2011-01-09 0.376406 
2011-01-10 -0.469988 
Freq: D 

In [186]: s.asfreq(BDay()) 
Out[186]: 
2011-01-03 -1.314430 
2011-01-04 -1.867307 
2011-01-05 0.779609 
2011-01-06 0.588950 
2011-01-07 -2.505803 
2011-01-10 -0.469988 
Freq: B 

:

In [187]: x=datetime(2011, 1, 5) 

In [188]: y=datetime(2011, 1, 9) 

In [189]: s.ix[x:y] 
Out[189]: 
2011-01-05 0.779609 
2011-01-06 0.588950 
2011-01-07 -2.505803 
2011-01-08 0.800262 
2011-01-09 0.376406 
Freq: D 

In [190]: s.ix[x:y].asfreq(BDay()) 
Out[190]: 
2011-01-05 0.779609 
2011-01-06 0.588950 
2011-01-07 -2.505803 
Freq: B 

count()

In [191]: s.ix[x:y].asfreq(BDay()).count() 
Out[191]: 3 
+0

와우 .. 딱! 고마워요! –

17

또한이 목적을 위해 date_range를 사용할 수 있습니다. 모두 시작 및 종료 날짜를 포함하는 것을

In [3]: pd.date_range('2011-01-05', '2011-01-09', freq=BDay()) 

Out[3]: DatetimeIndex(['2011-01-05', '2011-01-06', '2011-01-07'], dtype='datetime64[ns]', freq='B', tz=None) 

편집

심지어 더 간단

In [7]: pd.bdate_range('2011-01-05', '2011-01-09') 

Out[7]: DatetimeIndex(['2011-01-05', '2011-01-06', '2011-01-07'], dtype='datetime64[ns]', freq='B', tz=None) 

참고. 출처 : bdate_range 또는 BDay()를 사용하는 경우 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.bdate_range.html

10

그냥 조심 - 이름이이 일의 범위를 현실에 즉 밖으로 제거 주말 (그냥 일입니다 반면이라고 생각하는 당신을 오해 할 수는. 휴일을 고려하지 않음).

14

v0.14부터 휴일 캘린더를 사용할 수 있습니다.

 
from pandas.tseries.holiday import USFederalHolidayCalendar 
from pandas.tseries.offsets import CustomBusinessDay 

us_bd = CustomBusinessDay(calendar=USFederalHolidayCalendar()) 
print pd.DatetimeIndex(start='2010-01-01',end='2010-01-15', freq=us_bd) 

반환 :

 
DatetimeIndex(['2010-01-04', '2010-01-05', '2010-01-06', '2010-01-07', 
       '2010-01-08', '2010-01-11', '2010-01-12', '2010-01-13', 
       '2010-01-14', '2010-01-15'], 
       dtype='datetime64[ns]', freq='C') 
+1

날짜 범위 사이의 날짜 수를 원하면 'pd.DatetimeIndex (시작 ='2010-01-01 ', 끝 ='2010-01-15 ', freq = us_bd)로 가져올 수 있습니다. .shape [ 0]' – tsando

관련 문제