기간별 날짜 문자열 생성
yyyymmdd 기간동안 일별 또는 월별 자료 생성
- 기준 시작 및 끝 날짜 지정하고 그 기간동안 일일을 yyyymmdd형태로 생성
start_date
: 기준 시작 연월일end_date
: 기준 끝 연월일current_date
: 시작 연월일 부터 끝 연월일까지timedelta(days = 1)
1일 간격으로 생성
timedelta
: 날짜와 시간 간의 차이를 나타내는데 사용- 매개변수:
days
,hours
,minutes
,seconds
등 days=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) # 일별
# 월별
while current_date <= end_date:
date_list.append(current_date.strftime('%Y%m'))
current_date += relativedelta(months = 1) # 월별
print(date_list)
시간 간격
timedelta
datetime
패키지
- 일(day) 단위로만 지원됨
- 매개변수:
days
,hours
,minutes
,seconds
relativedelta
dateutil.relativedelta
패키지
- 월 단위 이상으로 시간 간격을 설정할 경우 활용
- 매개변수:
months
,years
등
from datetime import datetime
from dateutil.relativedelta import relativedelta
# 현재 날짜와 시간 가져오기
current_datetime = datetime.now()
# 4년 전 날짜 계산
four_years_ago = current_datetime - relativedelta(years=4)
# 양식 설정
four_years_age = four_years_age.strftime("%Y%m%d")
날짜 양식
날짜 양식 맞춤
date
타입에strftime()
메서드 활용
yyyymmdd
%Y
: 연도를 나타냅니다(네 자리).%m
: 월을 나타냅니다(01부터 12까지).%d
: 일(day)을 나타냅니다(01부터 31까지).- 예 1) 2024-02-28
strftime('%Y-%m-%d)
- 예 2) 20240228
strftime('%Y%m%d)
연월일 외 시간까지 표현
- 예) 15:32:02
strftime('%H:%M:%S')
- 예) 153202
strftime('%H%M%S')
%H
: 24시간 형식의 시간을 나타냅니다(00부터 23까지).%M
: 분을 나타냅니다(00부터 59까지).%S
: 초를 나타냅니다(00부터 59까지).%A
: 요일의 전체 이름을 나타냅니다(예: Monday).%B
: 월의 전체 이름을 나타냅니다(예: January).%a
: 요일의 축약된 이름을 나타냅니다(예: Mon).%b
: 월의 축약된 이름을 나타냅니다(예: Jan).%p
: AM 또는 PM을 나타냅니다.
요일 표시
yyyymmdd 양식
dt
연산자 활용
요일 문자열 추출
dt.day_name()
- 월요일:
Monday
/ 일요일:Sunday
- 월요일:
from datetime import datetime
import pandas as pd
# date 타입 변환
df['date'] = pd.to_datetime(df['date'], format = '%Y%m%d')
df['weekday'] = df['date'].day_name()
요일 정수 추출
dt.dayofweek
dt.weekday
- 0 - 월요일 / 6 - 일요일
# date 타입 변환
df['date'] = pd.to_datetime(df['date'], format = '%Y%m%d')
df['weekday'] = df['date'].dayofweek
df['weekday'] = df['date'].weekday
평일 / 주말 구분
- 요일 문자열을 조건문 활용
- 요일 정수를 조건문 활용
- 요일 정수값을 5로 나눈 후 몫이 1인 경우, 주말
df['weekday'] = df['date'].apply(lambda x: '주말' if x.weekday() // 5 == 1 else '평일')
날짜 출력
import datetime
# 현재시간 지정
now = datetime.datetime.now()
# 날짜 및 시간 출력
print(now.year, '년')
print(now.month, '월')
print(now.day, '일')
print(now.hour, '시')
print(now.minute, '분')
print(now.second, '초')
문자열을 날짜 형식으로 변환
col1
열 값 날짜 및 시간 형식으로 변환- 변환 과정 중 오류 발생 시 NaT(Not a Time)으로 반환
pd.to_datetime(df['col1'], errors='coerce)
시작 및 끝 연월일 구하기
목적
날짜 정보를 입력받아 해당 날짜의 시작연월일과 끝연월일 구하기
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')