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

[Pandas] date_range / Timestamp

· 수정 · 📖 약 1분 · 239자/단어 #python #pandas #datetime #date-range
Pandas date_range, pd.date_range, Pandas Timestamp, Pandas Timedelta

정의

  • pd.date_range : 정해진 시작/끝/간격으로 datetime 시퀀스 생성
  • pd.Timestamp : pandas 의 단일 datetime 객체
  • pd.Timedelta : 시간 차이

date_range

pd.date_range(start='2024-01-01', end='2024-01-31', freq='D')
pd.date_range(start='2024-01-01', periods=10, freq='D')
pd.date_range(end='2024-01-31', periods=10, freq='D')

start, end, periods, freq3 개 만 지정.

python
import pandas as pd
idx = pd.date_range('2024-01-01', periods=5, freq='D')
print(idx)
print('---')
print(pd.date_range('2024-01-01', '2024-01-31', freq='W'))
결과
DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04',
             '2024-01-05'],
            dtype='datetime64[ns]', freq='D')
---
DatetimeIndex(['2024-01-07', '2024-01-14', '2024-01-21', '2024-01-28'], dtype='datetime64[ns]', freq='W-SUN')

freq 옵션 (대표)

freq의미
D매일
B영업일
W, W-MON매주 (요일 지정 가능)
MS, ME월초/월말
QS, QE분기초/분기말
YS, YE연초/연말
h, 30min, 15s시간 단위 (숫자 prefix 가능)
2D, 3W곱셈

tz 지정

pd.date_range('2024-01-01', periods=10, freq='D', tz='Asia/Seoul')
pd.date_range('2024-01-01', periods=10, freq='D', tz='UTC')

Timestamp 생성

pd.Timestamp('2024-01-15')
pd.Timestamp('2024-01-15 14:30:00', tz='Asia/Seoul')
pd.Timestamp(year=2024, month=1, day=15)
pd.Timestamp.now()
pd.Timestamp.today()      # 같음 (now 와 거의 동일)

연산

ts = pd.Timestamp('2024-01-15')
ts + pd.Timedelta(days=10)         # 2024-01-25
ts + pd.DateOffset(months=1)       # 2024-02-15 (월 단위)
ts - pd.Timestamp('2023-12-25')    # Timedelta('21 days')

Timedelta 는 정해진 시간, DateOffset 은 달력 단위 (월 길이 다름 고려).

Timedelta

pd.Timedelta(days=5, hours=3)
pd.Timedelta('1 days 02:00:00')
pd.to_timedelta(['1d', '2h', '30min'])

period (기간)

p = pd.Period('2024-01', freq='M')
p.start_time, p.end_time
p + 1                                # 2024-02
pd.period_range('2024-01', periods=12, freq='M')   # 12 개월

Timestamp 는 한 순간, Period 는 구간 (시작-끝).

DatetimeIndex 의 슬라이싱

df = pd.DataFrame(..., index=pd.date_range('2024-01-01', periods=100))
df['2024-02']
df['2024-02-15':'2024-03-15']
df.loc['2024-02-15':'2024-03-15']

자주 쓰는 패턴

보고 기간 생성

report_dates = pd.date_range('2024-01-01', '2024-12-31', freq='MS')
for d in report_dates:
    run_monthly_report(d)

누락된 날짜 채우기

full_range = pd.date_range(df.index.min(), df.index.max(), freq='D')
df = df.reindex(full_range, fill_value=0)

영업일 계산

pd.date_range('2024-01-01', '2024-01-31', freq='B')   # 영업일만

함정

1. freq 가 정해지지 않은 경우

pd.DatetimeIndex(['2024-01-01', '2024-01-15', '2024-01-30'])
# freq=None, resample 등 일부 동작이 제한

명시적 freq 가 필요하면 .asfreq('D').

2. DateOffset vs Timedelta

pd.Timestamp('2024-01-31') + pd.Timedelta(days=30)     # 2024-03-01
pd.Timestamp('2024-01-31') + pd.DateOffset(months=1)   # 2024-02-29 (윤년)

월/년 단위는 DateOffset, 절대 시간은 Timedelta.

3. periods 계산

pd.date_range('2024-01-01', '2024-01-31', freq='D')
# 31 개 (양쪽 inclusive)

참고

이 글의 용어 (3개)
[Pandas] .dt accessorpandas
정의 는 datetime Series 의 각 구성요소 (년/월/일/시/분/요일 등) 에 벡터로 접근하는 accessor. 의 datetime 버전. 기본 컴포넌트 | 속성 | 의…
[Pandas] resamplepandas
정의 는 시계열 데이터를 다른 빈도 (월별, 일별, 시간별 등) 로 재샘플링하면서 집계한다. 의 시계열 버전. DatetimeIndex (또는 으로 datetime 컬럼) 이 필…
[Pandas] to_datetimepandas
정의 는 문자열/숫자를 datetime 으로 변환. pandas 의 시계열 작업의 시작. 기본 <CodeWithOutput language="python" outputLangua…

💬 댓글

사이트 검색 / 명령어

검색

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