시계열 자료
인덱스가 날짜, 시간이 데이터를 시계열 자료라고 한다. Pandas에서 시계열 자료를 생성하기 위해서는 특정한 순간에 기록된 타임스탬프 형식의 자료를 다루기 위한 DatetimeIndex 자료형으로 만들어야 한다. 인덱스인 타임스탬프가 일정한 간격일 필요는 없다.
DatetimeIndex는 아래와 같은 함수를 이용해 생성한다.
to_datetime
날짜, 시간을 나타내는 문자열을 datetime 자료형으로 변환한 뒤 Datetimeindex를 생성한다.
date_str = ["2018, 1, 1", "2018, 1, 4", "2018, 1, 5", "2018, 1, 6"]
idx = pd.to_datetime(date_str)
idx
# 실행 결과
DatetimeIndex(['2018-01-01', '2018-01-04', '2018-01-05', '2018-01-06'], dtype='datetime64[ns]', freq=None)
생성한 인덱스를 이용해 Series, DataFrame을 생성할 수 있다.
np.random.seed(0)
s = pd.Series(np.random.randn(4), index=idx)
s
# 실행 결과
2018-01-01 1.764052
2018-01-04 0.400157
2018-01-05 0.978738
2018-01-06 2.240893
dtype: float64
date_range
시작일과 종료일, 시작일과 기간을 입력하면 범위 내의 DatetimeIndex를 생성해 준다.
pd.date_range("2018-4-1", "2018-4-10")
pd.date_range("2018-4-1", periods=10)
# 실행 결과
DatetimeIndex(['2018-04-01', '2018-04-02', '2018-04-03', '2018-04-04',
'2018-04-05', '2018-04-06', '2018-04-07', '2018-04-08',
'2018-04-09', '2018-04-10'],
dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2018-04-01', '2018-04-02', '2018-04-03', '2018-04-04',
'2018-04-05', '2018-04-06', '2018-04-07', '2018-04-08',
'2018-04-09', '2018-04-10'],
dtype='datetime64[ns]', freq='D')
freq 매개변수로 특정 날짜만 생성되도록 할 수 있다.
freq | 의미 |
s | 초 |
T | 분 |
H | 시간 |
D | 일 |
B | 평일 |
W | 주 |
W-MON | 주 |
M | 각 달의 마지막날 |
MS | 각 달의 첫날 |
BM | 평일 중 각 달의 마지막 날 |
BMS | 평읠 중 각 달의 첫날 |
그 외 : DateOffset objects
shift
shift 함수를 이용하면 인덱스는 두고 데이터만 이동시킬 수 있다.
np.random.seed(0)
ts = pd.Series(np.random.randn(4), index=pd.date_range(
"2018-1-1", periods=4, freq="M"))
ts
ts.shift(1)
# 실행 결과
2018-01-31 1.764052
2018-02-28 0.400157
2018-03-31 0.978738
2018-04-30 2.240893
Freq: M, dtype: float64
2018-01-31 NaN
2018-02-28 1.764052
2018-03-31 0.400157
2018-04-30 0.978738
Freq: M, dtype: float64
참고 문서