< * 날짜 관련 메소드 : to_datetime, dt.속성 * >
◆ 판다스(Pandas)에서 시계열 데이터를 다룰 때 사용하는 날짜 관련 메소드와 기능은 정말 강력하다.
1. 문자열을 날짜 형식으로 변환 (to_datetime)
가장 먼저 마주하게 되는 단계로 제각각인 날짜 형식의 문자열을 판다스가 이해할 수 있는 datetime64 객체로 바꾼다.
◎ 기본 사용법: pd.to_datetime(df['date_column'])
◎ 유연한 변환: dayfirst=True나 format='%Y-%m-%d' 옵션을 통해 복잡한 형식도 잡아낼 수 있다.
2. 날짜 구성 요소 추출 (.dt 접근자)
날짜 컬럼이 datetime 타입이라면, .dt를 통해 연, 월, 일, 요일 등을 아주 쉽게 뽑아낼 수 있다.
메소드 설명 예시 결과
-------------------------------------------------------------------
.dt.year 연도 추출 2024
.dt.month 월 추출 5
.dt.day 일 추출 15
.dt.day_name() 요일 이름 추출 Monday
.dt.weekday 요일 숫자 (월=0, 일=6) 0
.dt.quarter 분기 추출 2
--------------------------------------------------------------------
3. 날짜 범위 생성 (date_range)
비어 있는 날짜를 채우거나 테스트 데이터를 만들 때 유용하다.
◎ pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
◎ 주요 빈도(freq): D(일), W(주), M(월말), MS(월초), B(영업일)
4. 시계열 데이터 리샘플링 (resample)
시간 단위를 변경할 때 사용한다. (예: 일별 데이터를 월별 평균으로 계산)
◎ 다운샘플링: df.resample('M').mean() (일 -> 월)
◎ 업샘플링: df.resample('H').ffill() (일 -> 시간, 빈 곳은 앞의 값으로 채움)
5. 기간 이동 및 차이 (shift, diff)
◎ shift(1): 데이터를 한 칸 뒤로 밀어 전날 데이터와 비교할 때 사용한다.
◎ diff(): 현재 값과 이전 값의 차이를 바로 계산한다.
● 날짜 컬럼을 인덱스로 설정하면(df.set_index('date_column')), df['2024-01'] 처럼 슬라이싱만으로
특정 기간의 데이터를 아주 편하게 조회할 수 있다.
6. 날짜 관련 메소드를 사용한 예제 : 매출 데이터 분석
______<예제 : 다양한 형식의 날짜가 섞여 있는 가상의 매출 데이터 만들기>_______________
import pandas as pd
# 1. 데이터 생성
data = {
'date_str': ['2024-01-01', '2024/02/15', '2024.03.20', '2024-04-10'],
'sales': [100, 150, 200, 130]
}
df = pd.DataFrame(data)
# 2. 문자열을 datetime 타입으로 변환
df['date'] = pd.to_datetime(df['date_str'])
--------------------------------------------------------------------------------------------------------
1. 날짜 정보 추출하기 (.dt 활용)
날짜 객체에서 우리가 필요한 정보만 쏙쏙 골라내 새 컬럼을 만든다.
_____________________________________________________________________________
df['year'] = df['date'].dt.year # 연도
df['month'] = df['date'].dt.month # 월
df['day_name'] = df['date'].dt.day_name() # 요일 이름 (Monday 등)
df['is_weekend'] = df['date'].dt.weekday >= 5 # 주말 여부 (토=5, 일=6)
---------------------------------------------------------------------------------------
2. 특정 기간 데이터 필터링하기
날짜를 인덱스로 설정하면 직관적인 슬라이싱이 가능해진다.
______________________________________________________________________________
# 인덱스 설정
df.set_index('date', inplace=True)
# 2024년 2월 데이터만 조회
feb_data = df.loc['2024-02']
# 2024년 1월부터 3월까지 범위 조회
spring_data = df.loc['2024-01':'2024-03']
----------------------------------------------------------------------------------------
3. 시간 단위 변경하기 (resample)
일별로 기록된 데이터를 월별 합계로 요약하는 예제이다.
_______________________________________________________________________________
# 'ME'는 Month End(월말) 기준 리샘플링을 의미합니다.
monthly_sales = df['sales'].resample('ME').sum()
-----------------------------------------------------------------------------------------
4. 날짜 계산하기 (Timedelta)
현재 날짜로부터 특정 기간을 더하거나 빼는 계산도 간단하다.
_________________________________________________________________________________
# 모든 날짜에 7일을 더함
df['next_week'] = df.index + pd.Timedelta(days=7)
# 두 날짜 사이의 차이 계산
df['diff'] = df['next_week'] - df.index
-------------------------------------------------------------------------------------------