🔥알림🔥
① 테디노트 유튜브 - 구경하러 가기!
② LangChain 한국어 튜토리얼 바로가기 👀
③ 랭체인 노트 무료 전자책(wikidocs) 바로가기 🙌

2 분 소요

이번 포스팅에서는 pandas의 to_datetime() 함수를 사용하면서 발생할 수 있는 날짜 파싱 오류에 대한 해결 방법 을 소개하려고 합니다.

이러한 오류는 주로 날짜 형식의 불일치로 인해 발생하는데, 이를 위해 format 키워드를 사용하여 날짜 형식을 명시적으로 지정 함으로써 대부분의 문제를 해결할 수 있습니다. 여기서 사용되는 날짜 형식은 Python의 strftime지시자(Directive) 를 기반으로 합니다.

참고

날짜 형식에 적용하는 strftime 표

지시자 (Directive) 설명 (Description)
%a 요일의 축약된 이름 (예: Sun, Mon)
%A 요일의 전체 이름 (예: Sunday, Monday)
%w 요일을 10진수로 표시. 0이 일요일, 6이 토요일
%d 일 (01-31)
%b 월의 축약된 이름 (예: Jan, Feb)
%B 월의 전체 이름 (예: January, February)
%m 월 (01-12)
%y 2자리 연도
%Y 4자리 연도
%H 24시간 형식의 시간 (00-23)
%I 12시간 형식의 시간 (01-12)
%p AM 또는 PM
%M 분 (00-59)
%S 초 (00-59)
%f 마이크로초 (000000-999999)
%z UTC 오프셋 (+HHMM[SS[.ffffff]])
%Z 시간대 이름 (예: UTC, GMT)
%j 연의 일 번째로 10진수로 표시 (001-366)
%U 연의 주 번호. 일요일을 주의 첫 날로 간주 (00-53)
%W 연의 주 번호. 월요일을 주의 첫 날로 간주 (00-53)
%c 로케일의 적절한 날짜 및 시간 표현
%x 로케일의 적절한 날짜 표현
%X 로케일의 적절한 시간 표현
%% 리터럴 ‘%’ 문자

(예시) pandas.to_datetime()

기본 날짜 형식

import pandas as pd

date_str = '2021-06-15'
date_obj = pd.to_datetime(date_str, format='%Y-%m-%d')

미국식 날짜 형식 (월/일/연도)

date_str = '06/15/2021'
date_obj = pd.to_datetime(date_str, format='%m/%d/%Y')

연도가 2자리 수와 요일이 포함된 형식

date_str = 'Tue 21-06-15'
date_obj = pd.to_datetime(date_str, format='%a %y-%m-%d')

월의 전체 이름을 사용하는 형식

date_str = '15 June 2021'
date_obj = pd.to_datetime(date_str, format='%d %B %Y')

시간이 포함된 형식

date_str = '2021-06-15 13:45:30'
date_obj = pd.to_datetime(date_str, format='%Y-%m-%d %H:%M:%S')

12시간 형식과 AM/PM을 사용하는 경우

date_str = '06/15/2021 01:45:30 PM'
date_obj = pd.to_datetime(date_str, format='%m/%d/%Y %I:%M:%S %p')

(예시) datetime.strftime()

아래의 예시는 datetime 모듈의 날짜시간 객체를 strftime() 함수로 날짜시간 형식을 지정하여 표현 방식을 변환하는 예제입니다.

import datetime

# 현재 날짜 및 시간
now = datetime.datetime.now()

# 1. 기본 날짜 형식으로 변환
formatted_date = now.strftime('%Y-%m-%d')
print(formatted_date)  # 출력: 2021-06-15 (예를 들면)

# 2. 미국식 날짜 형식 (월/일/연도)으로 변환
formatted_date = now.strftime('%m/%d/%Y')
print(formatted_date)  # 출력: 06/15/2021

# 3. 요일, 날짜, 시간 형식으로 변환
formatted_date = now.strftime('%A, %d %B %Y %H:%M:%S')
print(formatted_date)  # 출력: Tuesday, 15 June 2021 13:45:30 (예를 들면)

# 4. 12시간 형식과 AM/PM으로 변환
formatted_date = now.strftime('%m/%d/%Y %I:%M:%S %p')
print(formatted_date)  # 출력: 06/15/2021 01:45:30 PM (예를 들면)

# 5. 연도의 처음부터 지난 날짜 수와 함께 변환
formatted_date = now.strftime('%j %Y')
print(formatted_date)  # 출력: 166 2021 (예를 들면 2021년의 166번째 날)

# 6. 시간대 정보와 함께 변환 (지역에 따라 다를 수 있음)
formatted_date = now.strftime('%Y-%m-%d %H:%M:%S %Z')
print(formatted_date)  # 출력: 2021-06-15 13:45:30 UTC (예를 들면)

# 7. UTC 오프셋을 포함하여 변환 (지역에 따라 다를 수 있음)
formatted_date = now.strftime('%Y-%m-%d %H:%M:%S %z')
print(formatted_date)  # 출력: 2021-06-15 13:45:30 +0000 (예를 들면)

댓글남기기