본문 바로가기
Programming/Python

Pandas 시계열 데이터 구조

by NAMP 2018. 1. 18.

Pandas 시계열 데이터 구조

  • 타임스탭프(time stamp)의 경우, Pandas는 Timestamp타입을 제공한다. 좀 더 효율적인 numpy.datetime64 데이터 타입을 기반으로 한다. 관련 인덱스 구조는 DatetiemIndex다.
  • 기간(time period)의 경우, Pandas는 Period타입을 제공한다. 이것은 numpy.datetime64를 기반으로 고정 주파수 간격을 인코딩한다. 관련 인덱스 구조는 PeriodIndex다.
  • 시간 델타 또는 지속 기간의 경우, Pandas는 Timedelta 타입을 제공한다. Timedelta는 파이썬의 기본 datetime.timedelta 타입의 좀 더 효율적인 대체 타입이며 numpy.timedelta를 기반으로 한다. 관련 인덱스 구조는 TimedeltaIndex다.
import pandas as pd
from datetime import datetime

dates = pd.to_datetime([datetime(2015,7,3), '4th of July, 2015',
                        '2015-Jul-6', '07-07-2015', '20150708'])
dates

 

DatetimeIndex(['2015-07-03', '2015-07-04', '2015-07-06', '2015-07-07',
               '2015-07-08'],
              dtype='datetime64[ns]', freq=None)

 

dates.to_period('D')

 

PeriodIndex(['2015-07-03', '2015-07-04', '2015-07-06', '2015-07-07',
             '2015-07-08'],
            dtype='period[D]', freq='D')

 

dates- dates[0]

 

TimedeltaIndex(['0 days', '1 days', '3 days', '4 days', '5 days'], dtype='timedelta64[ns]', freq=None)

 

 

pd.date_range('2015-07-03', '2015-07-10')

 

DatetimeIndex(['2015-07-03', '2015-07-04', '2015-07-05', '2015-07-06',
               '2015-07-07', '2015-07-08', '2015-07-09', '2015-07-10'],
              dtype='datetime64[ns]', freq='D')

 

pd.date_range('2015-07-03', periods=8)

 

DatetimeIndex(['2015-07-03', '2015-07-04', '2015-07-05', '2015-07-06',
               '2015-07-07', '2015-07-08', '2015-07-09', '2015-07-10'],
              dtype='datetime64[ns]', freq='D')

 

pd.date_range('2015-07-03', periods=8, freq='H')

 

DatetimeIndex(['2015-07-03 00:00:00', '2015-07-03 01:00:00',
               '2015-07-03 02:00:00', '2015-07-03 03:00:00',
               '2015-07-03 04:00:00', '2015-07-03 05:00:00',
               '2015-07-03 06:00:00', '2015-07-03 07:00:00'],
              dtype='datetime64[ns]', freq='H')

 

freq 오타가 나지 않게 정확하게 입력해야 합니다. 잘못 입력해서 frag로 하면 값이 안 나옵니다.

pd.period_range('2015-07', periods=8, freq='M')

 

PeriodIndex(['2015-07', '2015-08', '2015-09', '2015-10', '2015-11', '2015-12',
             '2016-01', '2016-02'],
            dtype='period[M]', freq='M')

 

pd.timedelta_range(0, periods=10, freq='H')

 

TimedeltaIndex(['00:00:00', '01:00:00', '02:00:00', '03:00:00', '04:00:00',
                '05:00:00', '06:00:00', '07:00:00', '08:00:00', '09:00:00'],
               dtype='timedelta64[ns]', freq='H')

 

주기와 오프셋

pandas 주기 코드

코드설명코드설명
D달력상 일B영업일
W  
M월말BM영업일 기준 월말
Q분기말BQ영업일 기준 분기말
A연말BA영업일 기준 연말
H시간BH영업 시간
T  
S  
L밀리초  
U마이크로초  
N나노초  

주기 코드의 시작 시점을 표시하는 목록

코드설명코드설명
MS월초BMS영업일 기준 월초
QS분기초BQS영업일 기준 분기초
AS연초BAS영업일 기준 연초

 

pd.timedelta_range(0, periods=9, freq='2H30T')

 

TimedeltaIndex(['00:00:00', '02:30:00', '05:00:00', '07:30:00', '10:00:00',
                '12:30:00', '15:00:00', '17:30:00', '20:00:00'],
               dtype='timedelta64[ns]', freq='150T')

 

from pandas.tseries.offsets import BDay
pd.date_range('2015-07-01', periods=5, freq=BDay())

 

DatetimeIndex(['2015-07-01', '2015-07-02', '2015-07-03', '2015-07-06',
               '2015-07-07'],
              dtype='datetime64[ns]', freq='B')

 

pd.date_range('2015-07-01', periods=5, freq='B')

 

DatetimeIndex(['2015-07-01', '2015-07-02', '2015-07-03', '2015-07-06',
               '2015-07-07'],
              dtype='datetime64[ns]', freq='B')

 

from pandas.tseries.offsets import BDay 와 동일하게 freq='B'를 사용할 수 있습니다.

댓글