[판다스 14화] 날짜와 시간 데이터(datetime) 처리 활용법 정리 | Python Pandas | 빅분기, 빅데이터분석기사 실기

기업의 매출 데이터, 웹 서버의 로그 기록, 금융 시장의 주가 지수 등 우리가 실무에서 접하는 수많은 데이터셋에는 ‘시간’ 요소가 포함되어 있습니다. 특정 시점의 변화 추이를 추적하고 트렌드를 분석하는 시계열 데이터 분석(Time Series Analysis)은 데이터 분석과 머신러닝 분야에서 중요한 역할을 담당합니다.

외부 데이터를 판다스(Pandas) 데이터프레임으로 처음 불러오면, 날짜 형식을 가진 데이터임에도 불구하고 단순 문자열(object) 타입으로 인식되는 경우가 대다수입니다. 이 상태에서는 “월별 매출 집계”, “요일별 평균 방문자 수 계산”과 같은 시간 기반의 연산을 수행하기가 까다롭습니다.

이번 글에서는 문자열 데이터를 판다스가 인식하는 날짜 시간 데이터 타입(datetime64)으로 변환하는 방법부터 핵심 속성을 활용한 파생변수 생성, 그리고 빅데이터분석기사(빅분기) 실기 시험에 유용한 팁까지 단계별로 살펴보겠습니다.

1. 문자열을 날짜 형식으로 변환하기: pd.to_datetime()

판다스에서 시계열 연산을 시작하기 위한 첫 번째 단계는 문자열 형태의 날짜 데이터를 판다스가 처리할 수 있는 날짜 시간 타입으로 변환하는 것입니다. 이때 사용하는 핵심 함수가 바로 pd.to_datetime()입니다.

1.1. 기본 변환 방법

import pandas as pd

# 가상의 이커머스 매출 데이터 생성
sales_df = pd.DataFrame({
    '주문일자': ['2026-01-10', '2026/02/15', '2026.03.20', '2026-04-25'],
    '매출액': [500000, 750000, 420000, 900000]
})

# 변환 전 데이터 타입 확인
print(sales_df['주문일자'].dtypes)  # 출력: object

# pd.to_datetime을 활용한 타입 변환
sales_df['주문일자'] = pd.to_datetime(sales_df['주문일자'])

# 변환 후 데이터 타입 확인
print(sales_df['주문일자'].dtypes)  # 출력: datetime64[ns]

pd.to_datetime() 함수는 대시(-), 슬래시(/), 마침표(.) 등 한국이나 글로벌 환경에서 널리 쓰이는 표준적인 날짜 구분 기호들을 자동으로 인식하여 datetime64 데이터 타입으로 변환해 주는 장점을 가지고 있습니다.

1.2. 특수한 날짜 포맷 지정 (format)

만약 날짜가 20260110과 같이 구분 기호가 없는 숫자 형태이거나, 10-01-2026 (일-월-년)과 같이 비표준적인 순서로 기록되어 있다면 판다스가 파싱 오류를 낼 수 있습니다. 이때는 format 파라미터를 사용하여 원본 데이터의 구조를 직접 명시해 주는 것이 안전합니다.

# 일-월-년 구조의 문자열 데이터 변환
custom_dates = pd.to_datetime(['25-12-2026', '31-10-2026'], format='%d-%m-%Y')
  • %Y: 4자리 연도 (예: 2026)
  • %m: 2자리 월 (01~12)
  • %d: 2자리 일 (01~31)
  • %H/%M/%S: 시/분/초

2. 날짜 속성 추출하기: .dt 접근자(Accessor) 활용법

데이터의 타입을 datetime64로 변환하고 나면, 판다스의 강력한 기능인 .dt 접근자를 사용할 수 있게 됩니다. 이는 앞서 13화에서 배운 문자열용 .str 접근자와 유사하게, 모든 행의 날짜 정보에서 연, 월, 일, 요일 등의 요소를 한 번에 분리하여 새로운 열로 만드는 파생변수 생성 기법입니다.

2.1. 연, 월, 일, 시, 분, 초 추출

# 연, 월, 일 파생변수 각각 생성
sales_df['연도'] = sales_df['주문일자'].dt.year
sales_df['월'] = sales_df['주문일자'].dt.month
sales_df['일'] = sales_df['주문일자'].dt.day

2.2. 요일 및 주차 계산

비즈니스 인사이트를 도출할 때 주말 매출 비중이나 요일별 트렌드는 중요한 분석 대상입니다.

# 요일을 숫자로 추출 (0: 월요일, 1: 화요일, ..., 6: 일요일)
sales_df['요일_숫자'] = sales_df['주문일자'].dt.weekday

# 요일 이름을 영문으로 추출
sales_df['요일_명칭'] = sales_df['주문일자'].dt.day_name()

3. 시간의 흐름과 차이 계산하기: Timedelta

마케팅 프로모션 반응 주기나 상품 배송 소요 시간 등을 분석할 때는 두 날짜 간의 간격을 계산해야 합니다. 판다스에서는 날짜 객체 간의 뺄셈 연산을 수행하면 자동으로 타임델타(Timedelta) 객체가 생성됩니다.

Python

# 가상 배송 데이터 생성
delivery_df = pd.DataFrame({
    '주문일': pd.to_datetime(['2026-05-01', '2026-05-03']),
    '배송완료일': pd.to_datetime(['2026-05-04', '2026-05-08'])
})

# 배송 소요 기간 연산 (Timedelta 객체 생성)
delivery_df['소요기간'] = delivery_df['배송완료일'] - delivery_df['주문일']
print(delivery_df['소요기간'])
# 출력 결과:
# 0   3 days
# 1   5 days
# Name: 소요기간, dtype: timedelta64[ns]

수치형 통계 연산(예: 평균 배송 소요 시일 계산)에 활용하기 위해 뒤에 덧붙은 days라는 글자를 떼어내고 순수한 숫자 데이터만 남기고 싶다면, .dt.days 속성을 적용하여 정수형 변수로 다듬어 주는 편이 효율적입니다.

# 타임델타에서 순수 정수 형태의 일수만 추출
delivery_df['소요일수_정수'] = delivery_df['소요기간'].dt.days

4. 빅데이터분석기사 실기 시험 환경에서의 실전 활용 포인트

빅데이터분석기사 실기(작업형 제1유형)에서는 날짜 조건에 따른 데이터 필터링과 통계량 요약을 결합한 문제가 자주 등장합니다.

4.1. 특정 기간 데이터 필터링

예를 들어 “주문 데이터셋에서 2026년 2월 한 달 동안 발생한 총매출액을 구하시오”라는 요건이 주어진다면, 불리언 인덱싱과 날짜 변환을 결합하여 가독성 높은 코드를 작성할 수 있습니다.

# 1. 날짜 데이터 타입 변환 필수 수행
df['Date'] = pd.to_datetime(df['Date'])

# 2. 방법 A: dt 접근자를 활용한 필터링 및 합계 계산
feb_sales_A = df.loc[(df['Date'].dt.year == 2026) & (df['Date'].dt.month == 2), '매출액'].sum()

# 3. 방법 B: 날짜 문자열 직관적 비교 슬라이싱 (인덱스로 지정 시 유용)
# 판다스는 datetime64 타입에 대해 '2026-02-01' 형태의 문자열 비교 연산을 지원합니다.
feb_sales_B = df.loc[(df['Date'] >= '2026-02-01') & (df['Date'] <= '2026-02-28'), '매출액'].sum()

4.2. 결측치 파싱 및 에러 제어전략

현업이나 시험용 원본 데이터 중에는 날짜 칸에 문자열 ‘누락’ 또는 공백이 들어가 있어 변환 시 ValueError를 일으키는 경우가 종종 존재합니다. 이때는 errors='coerce' 파라미터를 추가하여 변환이 불가능한 쓰레기 값을 판다스가 알아서 NaT(Not a Time, 날짜형 결측치)로 치환하도록 유도하는 방식을 권장합니다. 이후 11화에서 배운 결측치 제거 기법을 적용해 안정적인 전처리 파이프라인을 완성합니다.

# 변환 불가능한 텍스트가 섞여 있어도 에러 없이 NaT로 우회 처리
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')

5. 요약 및 다음 화 안내

  • pd.to_datetime(): 문자열 포맷 데이터를 날짜 및 시간 기반 연산이 가능한 datetime64 객체로 일괄 보정합니다.
  • .dt 접근자: 개별 행을 루프 처리하지 않고 연, 월, 일, 요일 정보를 시리즈 구조로 추출하여 파생 피처로 정립합니다.
  • Timedelta: 두 날짜 또는 시간의 차이를 표현하는 자료형으로, .dt.days를 활용하면 일(day) 단위의 정수값으로 변환할 수 있습니다.

다음 [판다스 15화]에서는 수집된 변수들의 분석 성격에 맞춰 그릇을 바꿔주는 기법인 데이터 타입 변환하기: astype, to_datetime, to_numeric 활용법에 대해 상세하게 학습해 보겠습니다. 데이터 형태를 정밀하게 재구조화하는 테크닉을 함께 익혀봅시다.

댓글 남기기