Summary
while루프에timedelta/relativedelta를 더해 기간별 날짜 문자열 리스트를 만든다dt.day_name()은 요일 문자열을,dt.dayofweek는 요일 정수(월=0)를 반환한다- 요일 정수를 5로 나눈 몫으로 평일·주말을 구분한다
기간별 날짜 문자열 생성
시작일부터 끝일까지 일별 또는 월별로 YYYYMMDD(또는 YYYYMM) 문자열 리스트를 생성한다. 일별은 timedelta(days=1), 월별은 relativedelta(months=1)을 더한다.
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
start_date = datetime(2023, 2, 21)
end_date = datetime(2024, 2, 20)
date_list = []
current_date = start_date
# 일별
while current_date <= end_date:
date_list.append(current_date.strftime('%Y%m%d'))
current_date += timedelta(days=1)
# 월별 (current_date를 다시 start_date로 초기화 후)
while current_date <= end_date:
date_list.append(current_date.strftime('%Y%m'))
current_date += relativedelta(months=1)요일 추출
요일 문자열
dt.day_name()은 Monday, Sunday 같은 요일 이름을 반환한다.
import pandas as pd
df['date'] = pd.to_datetime(df['date'], format='%Y%m%d')
df['weekday'] = df['date'].dt.day_name()요일 정수
dt.dayofweek(또는 dt.weekday)는 월요일을 0, 일요일을 6으로 반환한다.
df['date'] = pd.to_datetime(df['date'], format='%Y%m%d')
df['weekday'] = df['date'].dt.dayofweek평일 / 주말 구분
요일 정수를 5로 나눈 몫이 1이면 주말(토=5, 일=6)이다.
df['weekday'] = df['date'].apply(lambda x: '주말' if x.weekday() // 5 == 1 else '평일')월 시작일·끝일 구하기
날짜를 입력받아 그 달의 첫날과 끝날을 구한다. 끝날은 다음 달 1일에서 하루를 뺀다.
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
def get_first_day(date):
first_day = datetime(year=date.year, month=date.month, day=1).date()
return first_day.strftime('%Y%m%d')
def get_last_day(date):
first_day = datetime(year=date.year, month=date.month, day=1).date()
last_day = first_day + relativedelta(months=1) - timedelta(days=1)
return last_day.strftime('%Y%m%d')Reference