Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 시작일과 종료일 사이의 총 영업일 수 계산하기

개요

데이터 분석이나 프로젝트 일정 관리를 하다 보면 특정 기간 동안의 영업일(평일) 수가 몇 일인지 계산해야 하는 경우가 자주 발생합니다. 이 글에서는 파이썬의 pandas 라이브러리를 활용해 시작 날짜와 종료 날짜 사이의 총 영업일 수를 구하는 함수를 작성하는 두 가지 방법을 소개합니다.

예를 들어, '2020-01-01'부터 '2020-02-02'까지의 영업일 범위를 생성하면 주말이 제외된 다음과 같은 날짜 목록을 얻을 수 있습니다.

Dates are:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06',
               '2020-01-07', '2020-01-08', '2020-01-09', '2020-01-10',
               '2020-01-13', '2020-01-14', '2020-01-15', '2020-01-16',
               '2020-01-17', '2020-01-20', '2020-01-21', '2020-01-22',
               '2020-01-23', '2020-01-24', '2020-01-27', '2020-01-28',
               '2020-01-29', '2020-01-30', '2020-01-31'],
               dtype='datetime64[ns]', freq='B')
Total number of days: 23

출력 결과에서 볼 수 있듯이 토요일과 일요일은 자동으로 제외되며, 최종적으로 총 23일의 영업일이 계산됩니다.

방법 1: len() 함수로 개수 세기

가장 간단하고 직관적인 방법은 영업일 범위 객체의 길이를 구하는 것입니다. 단계별로 살펴보겠습니다.

  • business_days()라는 이름의 함수를 정의합니다.

  • pd.bdate_range() 함수에 시작일 '2020-01-01'과 종료일 '2020-02-02'를 인자로 전달하고, 그 결과를 dates 변수에 저장합니다.

dates = pd.bdate_range('2020-01-01','2020-02-02')
  • len(dates)를 사용해 영업일의 총 개수를 계산합니다.

len(dates)

전체 코드 예제

import pandas as pd

def business_days():
    dates = pd.bdate_range('2020-01-01','2020-02-02')
    print("Total number of days:", len(dates))

business_days()

실행 결과

Total number of days: 23

bdate_rangebusiness date range의 약자로, 기본적으로 월요일부터 금요일까지만 포함하는 날짜 범위를 생성합니다. 따라서 len() 함수만으로도 손쉽게 영업일 수를 구할 수 있습니다.

방법 2: 반복문으로 개수 세기

두 번째 방법은 for 반복문을 사용해 각 날짜를 하나씩 순회하면서 직접 카운트하는 방식입니다. 알고리즘 학습 관점에서 유용한 접근법입니다.

  • 마찬가지로 business_days() 함수를 정의하고, pd.bdate_range()로 영업일 범위를 생성해 dates 변수에 저장합니다.

  • 카운터 변수 count를 0으로 초기화한 뒤, for 루프로 dates의 모든 값을 순회하면서 매번 1씩 증가시킵니다.

count = 0
for i in dates:
    count = count + 1
  • 마지막으로 count 값을 출력합니다.

전체 코드 예제

import pandas as pd

def business_days():
    dates = pd.bdate_range('2020-01-01','2020-02-02')
    count = 0
    for i in dates:
        count = count + 1
    print("Total number of days:", count)

business_days()

실행 결과

Total number of days: 23

참고: 공휴일까지 제외하려면?

두 방법 모두 주말만 제외하기 때문에 실무에서는 공휴일 처리가 필요할 수 있습니다. 이 경우 pandas.tseries.holiday 모듈 또는 CustomBusinessDay 클래스를 활용하면 국가별 공휴일을 반영한 영업일 계산이 가능합니다.

마무리

pandasbdate_range() 함수를 사용하면 시작일과 종료일 사이의 영업일 수를 단 몇 줄의 코드로 계산할 수 있습니다. 코드의 간결성을 중시한다면 len() 방법을, 반복문 로직 연습이나 커스텀 조건 추가가 필요하다면 for 루프 방식을 선택하면 됩니다.