일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 시간형식
- 빈 데이터프레임 #pandas #데이터전처리
- 응용이 보이는 선형대수
- 이수역 양식집
- np.split
- 년월일 데이터
- pandas # 월말 날짜 # 마지막 주 # 날짜계산 # 시계열 # 마지막 주 금요일
- stl
- 짧은 시계열 # 금융시계열
- 시계열분해
- 오제이튜브
- 시계열 #reindex #인덱스 확장 #datetime index #index extention # 데이터전처리
- pandas
- seaborn # kdeplot # 데이터분석
- 파이프라인전처리
- 시계열모듈
- 시계열시각화
- 크롤링자동화
- 확률
- timeseries decomposition
- 시계열데이터셋
- Python
- 음수값 #전처리 #선형보간 #pandas #데이터 #데이터분석
- 시계열
- 날짜파싱
- loess
- 플로틀리
- adf_test
- 시간형식변환
- 리눅스개념
- Today
- Total
데이터분석과 개발
[pandas] 한달 전 월말 날짜 구하기 본문
* 공부한 것을 정리한 글이므로 틀린 내용이 있을 수 있습니다.
* 더 좋은 방법 또는 틀린부분이 발견될 시 계속 수정하며 업데이트 할 예정입니다.
시계열 데이터를 다루다 보면 한달 전 , 한달 후, 두달 후 또는
마지막 주 금요일과 같이 특정 날짜를 구해야 할 때가 있습니다.
인덱스가 날짜다 보니 정확히 같은 날짜여야 제대로 된 분석, 예측이 가능하기에 그런 것 같습니다
제가 해결하려고 용썼던 결과들을 간단하게 정리해보도록 하겠습니다.
기준 날짜는 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
'AI(시계열) > 데이터 전처리' 카테고리의 다른 글
[pandas] if 문으로 빈 데이터프레임 거르기 (0) | 2023.03.16 |
---|---|
[pandas] 데이터프레임 날짜 인덱스 늘리기(reindex) (0) | 2023.03.16 |
[Pandas] 데이터 음수값 없애기 (0) | 2023.03.14 |
[Pandas] 년,월,일 따로 있는 데이터 읽기 : parse_dates, date_parser, index_col (0) | 2023.01.08 |