[Pandas] date_range / Timestamp
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, freq 중 3 개 만 지정.
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…
💬 댓글