Python

파이썬 공휴일 구하기 / pandas 공휴일 데이터 생성

하카데미 2022. 10. 29. 08:43

holidays 라이브러리엔 어지간한 나라의 공휴일 정보가 담겨있다.

그중 우리나라것도 있으니 진짜 좋음. 오예.

 

1. holidays 라이브러리 설치

# 쉘에서 실행
pip install holidays

2. 기본적인 사용방법

import holidays
kr_holidays = holidays.KR()

이때 kr_holidays를 호출해보면

공휴일과 대체공휴일의 정보가 딕셔너리로 아름답게 담겨있다.

'''
kr_holidays 출력 결과

{datetime.date(2022, 1, 1): "New Year's Day",
 datetime.date(2022, 1, 31): "The day preceding of Lunar New Year's Day",
 datetime.date(2022, 2, 1): "Lunar New Year's Day",
 datetime.date(2022, 2, 2): "The second day of Lunar New Year's Day",
 datetime.date(2022, 3, 1): 'Independence Movement Day',
 datetime.date(2022, 5, 1): 'Labour Day',
 datetime.date(2022, 5, 5): "Children's Day",
 datetime.date(2022, 5, 8): 'Birthday of the Buddha',
 datetime.date(2022, 6, 6): 'Memorial Day',
 datetime.date(2022, 8, 15): 'Liberation Day',
 datetime.date(2022, 9, 9): 'The day preceding of Chuseok',
 datetime.date(2022, 9, 10): 'Chuseok',
 datetime.date(2022, 9, 11): 'The second day of Chuseok',
 datetime.date(2022, 9, 12): 'Alternative holiday of Chuseok',
 datetime.date(2022, 10, 3): 'National Foundation Day',
 datetime.date(2022, 10, 9): 'Hangeul Day',
 datetime.date(2022, 10, 10): 'Alternative holiday of Hangeul Day',
 datetime.date(2022, 12, 25): 'Christmas Day'}
 '''

출력 내용을 보면 알 수 있듯

인자는 datetime형으로 넣어야 한다.

 

[참고] print(kr_holidays) 하면 위와같이 출력되지 않는다.

하단 코드를 참고하면 위와 같이 보기 좋게 확인할 수 있다.

import pprint
pprint.pprint(kr_holidays)

 

3. 여러 가지 활용방법

3.1 공휴일의 일자와 명칭을 가져오고 싶은 경우

for day, day_name in kr_holidays.items():
    print(day, day_name)
'''
출력 결과

2022-01-01 New Year's Day
2022-01-31 The day preceding of Lunar New Year's Day
2022-02-01 Lunar New Year's Day
2022-02-02 The second day of Lunar New Year's Day
2022-03-01 Independence Movement Day
2022-05-08 Birthday of the Buddha
2022-05-05 Children's Day
2022-05-01 Labour Day
2022-06-06 Memorial Day
2022-08-15 Liberation Day
2022-09-09 The day preceding of Chuseok
2022-09-10 Chuseok
2022-09-11 The second day of Chuseok
2022-09-12 Alternative holiday of Chuseok
2022-10-03 National Foundation Day
2022-10-09 Hangeul Day
2022-10-10 Alternative holiday of Hangeul Day
2022-12-25 Christmas Day
'''

holidays는 딕셔너리로 되어있기 때문에 딕셔너리의 함수를 이용할 수 있다.

그중 items()를 활용하여 공휴일의 일자(key)와 공휴일의 명칭(value)을 가져올 수 있다.

 

3.2 갖고 있는 여러 일자 중 휴일 출력하는 경우

for day in date_data:
    if day in kr_holidays:
        print(day)

date_data에는 2022-06-02 00:00:00 부터 2022-10-26 23:00:00 까지

3528개의 데이터가 Timestamp형으로 판다스의 시리즈에 담겨있는 상황이다.

이때 해당일자가 공휴일 안에 있다면 출력하도록 하는 코드이다.

실행하면 공휴일인 데이터가 출력된다.

 

중요한 점은

day in kr_holidays

이 코드를 실행해보면 알 수 있는데,

True, False로 반환한다.

 

3.3 공휴일 1, 아니면 0을 삽입하고 싶은 경우

만약 데이터프레임의 년원일 컬럼을 활용하여

공휴일일 경우 1, 아닌 경우 0으로 입력하여 컬럼명 holiday를 생성하고 싶다면

하단의 코드를 참고하면 된다.

# created_ at:년월일의 컬럼명
dt['holiday'] = dt.created_at.apply(lambda x: 1 if x in kr_holidays else 0)

 

 

holidays 공식문서 - 빠른 실행편

 

holidays

Generate and work with holidays in Python

pypi.org