Processor

【Pandas】 날짜 관련 메소드 : to_datetime, dt.속성

작성자 임베디드코리아 작성일26-04-16 00:27 조회90회 댓글0건
< * 날짜 관련 메소드 : 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
-------------------------------------------------------------------------------------------