본문으로 건너뛰기
김신건의 로그

[Pandas] .dt accessor

· 수정 · 📖 약 1분 · 208자/단어 #python #pandas #datetime
Pandas dt, Pandas .dt, Pandas dt accessor, datetime accessor

정의

Series.dt 는 datetime Series 의 각 구성요소 (년/월/일/시/분/요일 등) 에 벡터로 접근하는 accessor. str 의 datetime 버전.

s.dt.year
s.dt.month
s.dt.day
s.dt.hour
s.dt.weekday

기본 컴포넌트

속성의미
dt.year, dt.month, dt.day년/월/일
dt.hour, dt.minute, dt.second시/분/초
dt.dayofweek / dt.weekday요일 (0=월)
dt.day_name()요일 이름 (‘Monday’)
dt.month_name()월 이름 (‘January’)
dt.quarter분기 (1-4)
dt.dayofyear그 해의 몇일째
dt.week, dt.isocalendar()주차
dt.is_month_end, dt.is_month_start월말/월초 boolean
dt.days_in_month그 달의 일 수

사용

python
import pandas as pd
s = pd.to_datetime(['2024-01-15', '2024-03-30', '2024-12-25'])
s = pd.Series(s)
print('year :', s.dt.year.tolist())
print('month:', s.dt.month.tolist())
print('day  :', s.dt.day.tolist())
print('weekday:', s.dt.day_name().tolist())
print('quarter:', s.dt.quarter.tolist())
결과
year : [2024, 2024, 2024]
month: [1, 3, 12]
day  : [15, 30, 25]
weekday: ['Monday', 'Saturday', 'Wednesday']
quarter: [1, 1, 4]

포맷 변환

s.dt.strftime('%Y-%m-%d')                  # 문자열로
s.dt.strftime('%Y년 %m월 %d일 (%A)')
s.dt.normalize()                           # 시간 0으로 (날짜만)
s.dt.floor('h')                            # 시간 단위 내림
s.dt.ceil('h')                             # 올림
s.dt.round('15min')                        # 반올림

timezone

s.dt.tz                                    # 현재 timezone
s.dt.tz_localize('Asia/Seoul')             # naive → aware
s.dt.tz_convert('UTC')                     # 다른 timezone 으로

Timedelta 의 dt

td = pd.to_timedelta(['1 days 02:30:00', '2 days 05:00:00'])
td = pd.Series(td)
td.dt.days           # [1, 2]
td.dt.seconds        # 9000, 18000 (하루 안의 초)
td.dt.total_seconds()  # 전체 초

자주 쓰는 패턴

월별 분석

df['month'] = df['created_at'].dt.to_period('M')   # PeriodIndex (2024-01, 2024-02, ...)
df.groupby('month')['amount'].sum()

요일별 트렌드

df['weekday'] = df['date'].dt.day_name()
df.groupby('weekday')['orders'].mean()

영업일 / 주말

df['is_weekend'] = df['date'].dt.dayofweek >= 5

datetime 차이

df['days_since_signup'] = (pd.Timestamp.today() - df['signup_date']).dt.days

함정

1. dt 가 안 되는 경우

s = pd.Series(['2024-01-15', '2024-02-20'])
s.dt.year      # AttributeError, str 이라서
# 먼저 변환
pd.to_datetime(s).dt.year

2. tz-aware vs naive 비교

naive.tz_localize('UTC') > aware    # ✓
naive > aware                       # TypeError 가능

3. dayofweek 의 시작 (월요일 = 0)

s.dt.dayofweek    # 0=Mon ... 6=Sun
s.dt.weekday      # 같음
# Python 의 datetime.weekday() 과 동일

ISO 표준 (1=Mon) 은 s.dt.isocalendar().day.

참고

이 글의 용어 (3개)
[Pandas] date_range / Timestamppandas
정의 - : 정해진 시작/끝/간격으로 datetime 시퀀스 생성 - : pandas 의 단일 datetime 객체 - : 시간 차이 daterange , , , 중 3 개 만 …
[Pandas] resamplepandas
정의 는 시계열 데이터를 다른 빈도 (월별, 일별, 시간별 등) 로 재샘플링하면서 집계한다. 의 시계열 버전. DatetimeIndex (또는 으로 datetime 컬럼) 이 필…
[Pandas] to_datetimepandas
정의 는 문자열/숫자를 datetime 으로 변환. pandas 의 시계열 작업의 시작. 기본 <CodeWithOutput language="python" outputLangua…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기