데이터분석과 개발

[pandas] 한달 전 월말 날짜 구하기 본문

AI(시계열)/데이터 전처리

[pandas] 한달 전 월말 날짜 구하기

긍정적인마인드 2023. 3. 17. 00:42

* 공부한 것을 정리한 글이므로 틀린 내용이 있을 수 있습니다.

* 더 좋은 방법 또는 틀린부분이 발견될 시 계속 수정하며 업데이트 할 예정입니다.

 

시계열 데이터를 다루다 보면 한달 전 , 한달 후, 두달 후 또는

마지막 주 금요일과 같이 특정 날짜를 구해야 할 때가 있습니다. 

인덱스가 날짜다 보니 정확히 같은 날짜여야 제대로 된 분석, 예측이 가능하기에 그런 것 같습니다

 

제가 해결하려고 용썼던 결과들을 간단하게 정리해보도록 하겠습니다.

기준 날짜는 2022년 11월 30일로 하겠습니다.

 

import pandas as pd

date = pd.to_datetime("2022-11-30")
date

 

(1) 한달 전 날짜 구하기

dateutil 모듈의 relativedelta 함수를 사용하면 편리합니다.

relativedelta 함수 파라미터 months=1 을 넣어주고 빼주면 한달 전 날짜를 쉽게 구할 수 있습니다.

from dateutil.relativedelta import relativedelta

month_before = date - relativedelta(months=1)
month_before

출력 결과:

 

하지만 이 방식은 정말 날짜가 같고 달 수만 11월에서 10월로 바뀐 계산입니다.

그렇다면 월말인 2022년 10월 31일은 어떻게 구할까요?

 

(2) 한달 전 월말 날짜 구하기

월마지막 날짜를 구할 때는 pandas.tseries.offsets 에 MonthEnd 함수를 사용하면 편리합니다.

현재 날짜에서 MonthEnd() 안에 숫자만큼 더했을 때의 달에서의 가장 마지막 날짜를 출력해줍니다.

# 한달 전 마지막 날짜
from dateutil.relativedelta import relativedelta
from pandas.tseries.offsets import MonthEnd, MonthBegin

month_before_last = date - relativedelta(months=1) + MonthEnd(0)
month_before_last

출력결과:

그래서 date 에서 한달 뺀 10월 30일에서 1일을 더하면 그대로지만

2일을 더하면 11월로 넘어가게 되어 값이 바뀌게 됩니다.

 

* MonthBegin 함수도 있는 걸 보니 첫째날도 구할 수 있겠네요

 

(3) 한달 전 마지막 주 금요일 구하기

 

dateutil 모듈 안에는 FR 이라는 함수가 있습니다.

이 FR 함수를 relativedelta 함수안에 넣어주면 쉽게 마지막주 금요일을 구할 수 있습니다.

마지막 주 이기 때문에 FR(-1) 을 넣어줬고

상황에 따라 첫째주, 둘째주 등도 구할 수 있을 것 같네요!

# 한달전 마지막 주 금요일
from dateutil.relativedelta import relativedelta, FR

month_before_last_f = date - relativedelta(months=1,weekday=FR(-1))
month_before_last_f

 

지금까지 날짜 계산에 관련된 모듈을 사용해 보았습니다.

저는 주로 dateutil 모듈을 사용하는데 pandas의 offset 함수도 사용할 수 있으니 참고하시면 좋을 것 같습니다.

감사합니다.

 

 

참고

https://stackoverflow.com/questions/68014571/get-last-friday-of-each-month-in-python