<목차>
1. datetime 객체 이해와 기본 활용하기
2. 문자열 데이터를 datetime으로 변환하기
3. 시계열 데이터 불러오기와 시간 정보 추출 및 간격 계산
1. datetime 객체 이해와 기본 활용하기
datetime 라이브러리는 파이썬에서 날짜와 시간을 처리하는 다양한 기능을 제공하는 필수 라이브러리입니다. 이 객체를 사용해서 날짜 데이터를 편리하게 다루고 연산할 수 있습니다.
● 라이브러리 불러오기 & 현재 시간 확인
먼저 datetime 라이브러리에서 datetime 객체를 불러옵니다. 현재 날짜와 시간 정보를 확인하고 싶으면 now() 메서드를 사용합니다.
from datetime import datetime
now = datetime.now()
print(now)
● 원하는 날짜로 객체 생성 및 비교하기
특정 시점의 날짜를 지정하여 객체를 생성할 수도 있습니다.
ex) 1970년 1월 1일로 객체를 생성해 현재 시간과 비교.
t1 = datetime.now()
t2 = datetime(1970, 1, 1)
● 두 날짜 사이의 시간 차이 계산 (timedelta)
datetime 객체는 수학 연산자를 지원해주기 때문에, 날짜 간의 차이를 직관적으로 계산할 수 있습니다.
t1에서 t2를 빼서 시간 차이를 구하면, 결과는 timedelta 객체로 표현됩니다.
diff = t1 - t2
print(diff)
print(type(diff)) # <class 'datetime.timedelta'>
2. 문자열 데이터를 datetime으로 변환하기
판다스에서 데이터셋을 처음 불러오면 날짜 데이터가 object형으로 인식되는 경우가 많기 때문에 시계열 분석이 가능한 datetime형으로 변환하는 방법을 알아보겠습니다.
● 판다스 to_datetime() 함수 활용
전에 다뤄봤던 에볼라 데이터셋(country_timeseries.csv)을 예시로 들어보면, 데이터를 불러와 info() 메서드로 확인하면 Date 열이 object형인 것을 볼 수 있습니다. 이를 pd.to_datetime()를 통해 변환한 후 date_dt라는 새로운 열로 저장합니다.
import pandas as pd
ebola = pd.read_csv('/content/drive/MyDrive/codes/data/country_timeseries.csv')
ebola['date_dt'] = pd.to_datetime(ebola['Date'])
● format 매개변수로 시간 형식 지정하기
날짜 데이터의 형태를 명확하게 지정하고 싶으면 format 매개변수를 사용합니다. 만약 데이터가 '월/일/년' 형식 구조라면 각 요소를 나타내는 기호(%m, %d, %Y)와 슬래시(/)를 조합해서
ebola['date_dt'] = pd.to_datetime(ebola['Date'], format='%m/%d/%Y')
이런식으로 지정할 수 있습니다.
형식을 매번 직접 지정하지 않아도 to_datetime()에서 제공하는 매개변수를 쓸 수 있습니다.
ex) dayfirst=True : '31-05-2026'와 같이 'day'가 가장 앞에 오는 형식
yearfirst=True : '2026-05-31'과 같이 'year'가 가장 앞에 오는 형식
3. 시계열 데이터 불러오기& 시간 정보 추출/ 간격 계산
● 데이터 불러올 때 바로 datetime으로 변환하기
데이터를 불러오고 변환했던 것과 다르게, read_csv() 함수의 parse_dates 매개변수를 사용하면 데이터를 불러오면서 특정 열을 바로 datetime형으로 바꿀 수 있습니다.
ebola = pd.read_csv('/content/drive/MyDrive/codes/data/country_timeseries.csv', parse_dates=['Date'])
● 시간 정보 추출하기
단일 객체 데이터인 경우: .year, .month, .day 속성으로 각각 추출.
d = pd.to_datetime('2026-05-31')
print(d.year) # 2026
print(d.month) # 05
print(d.day) # 31
데이터프레임 열(Series) 전체인 경우: dt 속성을 먼저 호출한 뒤 메서드나 속성에 접근.
ebola['year'] = ebola['date_dt'].dt.year
ebola = ebola.assign(
month = ebola['date_dt'].dt.month,
day = ebola['date_dt'].dt.day
)
● 시간 간격 계산하기
datetime 형태로 변환된 열이 있으면 데이터셋 내에서 시간 간격을 쉽게 계산할 수 있습니다.
에볼라 데이터셋의 Day 열: 발병 이후 며칠이 지났는지를 나타내는 변수.
ex) 데이터셋 내에서 가장 오래된 날짜(발병 첫날)를 구하기--> date_dt 열에서 min() 메서드를 호출.
first_day = ebola['date_dt'].min()
발병 첫날과 각 행의 date_dt(각 날짜)의 차이를 계산하면, 데이터셋의 Day 열과 동일하게 '발병 후 몇 일이 지났는지'에 대한 시간 간격 값을 직접 계산할 수 있습니다.