판다스에서 영업일(business day)을 배열로 생성하는 방법
주말을 제외해 영업일 가져오기
판다스에서는 date_range 함수를 통해 날짜 배열을 얻을 수 있으며, 주기(freq)를 'B'로 지정하면 토요일과 일요일을 제외한 영업일을 얻을 수 있습니다.
다음 코드를 통해 2023-08-10부터 5개의 영업일을 추출해 보겠습니다.
import pandas as pd
pd.date_range('2023-08-10', periods=5, freq='B')
DatetimeIndex(['2023-08-10', '2023-08-11', '2023-08-14', '2023-08-15', '2023-08-16'],
dtype='datetime64[ns]', freq='B')
지정한 공휴일을 제외해 영업일 가져오기
위 결과에서 토요일과 일요일은 제외되었지만 2023년 8월 15일 광복절은 제외되지 않았습니다. 공휴일까지 제외하고자 한다면, bdate_range 함수를 사용합니다.
- 공휴일을 저장한 리스트를 생성합니다. (여기서는 holidays라는 변수명에 저장).
- bdate_range 함수를 사용하여 주기(freq)를 'C'로 지정하고, 매개변수 holidays에 앞서 저장한 리스트를 입력합니다. (C는 custom business day의 약자입니다.)
holidays = ['2023-08-15']
pd.bdate_range('2023-08-10', periods=5, freq='C', holidays=holidays)
DatetimeIndex(['2023-08-10', '2023-08-11', '2023-08-14', '2023-08-16', '2023-08-17'],
dtype='datetime64[ns]', freq='C')
공휴일인 2023년 8월 15일이 제외해 제대로 영업일을 반환하는 결과를 얻을 수 있습니다. 다만 모든 공휴일을 직접 리스트로 입력하는 것은 번거롭기에, 별도의 데이터 소스에서 불러오는 방법을 추천합니다.
공휴일 소스 추천 링크 : https://aspdotnet.tistory.com/2259
영업일의 기준 요일 지정하기
만약 영업일로 지정할 요일을 설정하고 싶다면, bdate_range 함수의 매개변수 weekmask를 활용합니다. 예를 들어, 우리 회사는 토요일에도 근무하고, 일요일과 공휴일만 휴무입니다. 이 기준에 따라 2023-8-10부터 5개의 영업일을 가져오는 방법은 다음과 같습니다.
weekmask = 'Mon Tue Wed Thu Fri Sat'
holidays = ['2023-08-15']
pd.bdate_range('2023-08-10', periods=5, freq='C', holidays=holidays, weekmask=weekmask)
DatetimeIndex(['2023-08-10', '2023-08-11', '2023-08-12', '2023-08-14','2023-08-16'],
dtype='datetime64[ns]', freq='C')
토요일은 영업일에 포함되며, 공휴일과 일요일만 제외된 5개의 영업일이 반환되었습니다.
교보문고 구매 페이지, 알라딘 구매 페이지, yes24 구매 페이지
유튜브에서 판다스 강의 중입니다.
https://www.youtube.com/@KimPandas
'판다스 > 중급 판다스' 카테고리의 다른 글
[pandas] period 자료형의 장점 (0) | 2024.10.16 |
---|---|
[pandas] 특정 열의 값을 기준으로 행을 선택하는 방법 (0) | 2024.05.22 |
[pandas] 멀티 인덱스에서 특정 값 수정하기 (0) | 2023.08.23 |
[pandas] 범주형 데이터를 정수로 코드화하는 다양한 방법 (0) | 2023.05.27 |
[pandas] 시리즈에 apply 대신 map 함수로 매핑하는 이유 (0) | 2023.05.27 |