- Pandas Tutorial - 파이썬 데이터 분석 라이브러리
- Pandas 객체 생성하기 (Object creation)
- Pandas 데이터 보기 (Viewing data)
- Pandas 데이터 선택하기 (Selection)
- Pandas 누락된 데이터 (Missing data)
- Pandas 연산 (Operations)
- Pandas 병합하기 (Merge)
- Pandas 그룹 (Grouping)
- Pandas 형태 바꾸기 (Reshaping)
- Pandas 타임 시리즈 (Time series)
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
Pandas 타임 시리즈 (Time series)¶
Pandas는 frequency 변환 과정에서 리샘플링을 수행하기 위한 간단하고 강력하고 효율적인 기능을 갖고 있습니다.
이것은 금융 분야에서 매우 흔하지만 다른 분야에서도 자주 사용됩니다.
◼︎ Table of Contents
1) 기본 사용¶
예제1¶
import pandas as pd
import numpy as np
rng = pd.date_range('1/1/2012', periods=100, freq='S')
print(rng)
DatetimeIndex(['2012-01-01 00:00:00', '2012-01-01 00:00:01',
'2012-01-01 00:00:02', '2012-01-01 00:00:03',
'2012-01-01 00:00:04', '2012-01-01 00:00:05',
'2012-01-01 00:00:06', '2012-01-01 00:00:07',
'2012-01-01 00:00:08', '2012-01-01 00:00:09',
'2012-01-01 00:00:10', '2012-01-01 00:00:11',
'2012-01-01 00:00:12', '2012-01-01 00:00:13',
'2012-01-01 00:00:14', '2012-01-01 00:00:15',
'2012-01-01 00:00:16', '2012-01-01 00:00:17',
'2012-01-01 00:00:18', '2012-01-01 00:00:19',
'2012-01-01 00:00:20', '2012-01-01 00:00:21',
'2012-01-01 00:00:22', '2012-01-01 00:00:23',
'2012-01-01 00:00:24', '2012-01-01 00:00:25',
'2012-01-01 00:00:26', '2012-01-01 00:00:27',
'2012-01-01 00:00:28', '2012-01-01 00:00:29',
'2012-01-01 00:00:30', '2012-01-01 00:00:31',
'2012-01-01 00:00:32', '2012-01-01 00:00:33',
'2012-01-01 00:00:34', '2012-01-01 00:00:35',
'2012-01-01 00:00:36', '2012-01-01 00:00:37',
'2012-01-01 00:00:38', '2012-01-01 00:00:39',
'2012-01-01 00:00:40', '2012-01-01 00:00:41',
'2012-01-01 00:00:42', '2012-01-01 00:00:43',
'2012-01-01 00:00:44', '2012-01-01 00:00:45',
'2012-01-01 00:00:46', '2012-01-01 00:00:47',
'2012-01-01 00:00:48', '2012-01-01 00:00:49',
'2012-01-01 00:00:50', '2012-01-01 00:00:51',
'2012-01-01 00:00:52', '2012-01-01 00:00:53',
'2012-01-01 00:00:54', '2012-01-01 00:00:55',
'2012-01-01 00:00:56', '2012-01-01 00:00:57',
'2012-01-01 00:00:58', '2012-01-01 00:00:59',
'2012-01-01 00:01:00', '2012-01-01 00:01:01',
'2012-01-01 00:01:02', '2012-01-01 00:01:03',
'2012-01-01 00:01:04', '2012-01-01 00:01:05',
'2012-01-01 00:01:06', '2012-01-01 00:01:07',
'2012-01-01 00:01:08', '2012-01-01 00:01:09',
'2012-01-01 00:01:10', '2012-01-01 00:01:11',
'2012-01-01 00:01:12', '2012-01-01 00:01:13',
'2012-01-01 00:01:14', '2012-01-01 00:01:15',
'2012-01-01 00:01:16', '2012-01-01 00:01:17',
'2012-01-01 00:01:18', '2012-01-01 00:01:19',
'2012-01-01 00:01:20', '2012-01-01 00:01:21',
'2012-01-01 00:01:22', '2012-01-01 00:01:23',
'2012-01-01 00:01:24', '2012-01-01 00:01:25',
'2012-01-01 00:01:26', '2012-01-01 00:01:27',
'2012-01-01 00:01:28', '2012-01-01 00:01:29',
'2012-01-01 00:01:30', '2012-01-01 00:01:31',
'2012-01-01 00:01:32', '2012-01-01 00:01:33',
'2012-01-01 00:01:34', '2012-01-01 00:01:35',
'2012-01-01 00:01:36', '2012-01-01 00:01:37',
'2012-01-01 00:01:38', '2012-01-01 00:01:39'],
dtype='datetime64[ns]', freq='S')
date_range()함수는 주어진 간격의 DatetimeIndex를 반환합니다.
‘1/1/2012’를 시작 지점으로 해서 ‘S’ (Second) 간격을 갖는 100개의 DatetimeIndex를 만들었습니다.
예제2¶
ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
print(ts)
2012-01-01 00:00:00 172
2012-01-01 00:00:01 47
2012-01-01 00:00:02 117
2012-01-01 00:00:03 192
2012-01-01 00:00:04 323
...
2012-01-01 00:01:35 99
2012-01-01 00:01:36 53
2012-01-01 00:01:37 396
2012-01-01 00:01:38 121
2012-01-01 00:01:39 426
Freq: S, Length: 100, dtype: int64
위의 예제에서 만들었던 DatetimeIndex (rng)를 인덱스로 하는 Series를 만들었습니다.
NumPy random 모듈의 np.random.randint() 함수는 임의의 정수를 반환합니다.
예제3¶
print(ts.resample('5S').sum())
print(ts.resample('5Min').sum())
2012-01-01 00:00:00 851
2012-01-01 00:00:05 1025
2012-01-01 00:00:10 968
2012-01-01 00:00:15 1463
2012-01-01 00:00:20 874
2012-01-01 00:00:25 932
2012-01-01 00:00:30 1491
2012-01-01 00:00:35 1749
2012-01-01 00:00:40 1276
2012-01-01 00:00:45 1403
2012-01-01 00:00:50 1058
2012-01-01 00:00:55 791
2012-01-01 00:01:00 1330
2012-01-01 00:01:05 1118
2012-01-01 00:01:10 1378
2012-01-01 00:01:15 1008
2012-01-01 00:01:20 1866
2012-01-01 00:01:25 1092
2012-01-01 00:01:30 1385
2012-01-01 00:01:35 1095
Freq: 5S, dtype: int64
2012-01-01 24153
Freq: 5T, dtype: int64
ts.resample(‘5S’).sum()는 5초 단위로 값을 합산합니다.
ts.resample(‘5Min’).sum()는 5분 단위로 값을 합산합니다.
2) 타임존 표현하기¶
예제1¶
rng = pd.date_range('3/6/2012 00:00', periods=5, freq='D')
print(rng)
DatetimeIndex(['2012-03-06', '2012-03-07', '2012-03-08', '2012-03-09',
'2012-03-10'],
dtype='datetime64[ns]', freq='D')
‘3/6/2012’를 시작으로 하고 ‘D’ (Day) 간격을 갖는 다섯 개의 DatetimeIndex를 만들었습니다.
예제2¶
ts = pd.Series(np.random.randn(len(rng)), rng)
print(ts)
ts_utc = ts.tz_localize('UTC')
print(ts_utc)
2012-03-06 1.764052
2012-03-07 0.400157
2012-03-08 0.978738
2012-03-09 2.240893
2012-03-10 1.867558
Freq: D, dtype: float64
2012-03-06 00:00:00+00:00 1.764052
2012-03-07 00:00:00+00:00 0.400157
2012-03-08 00:00:00+00:00 0.978738
2012-03-09 00:00:00+00:00 2.240893
2012-03-10 00:00:00+00:00 1.867558
Freq: D, dtype: float64
이번에는 NumPy random 모듈의 np.random.randn() 함수를 사용해서 임의의 난수를 만들었습니다.
tz_localize(‘UTC’)는 입력한 타임존에 맞게 Datetime Array/Index를 지역화합니다.
Datetime Array/Index가 tz-naive에서 tz-aware 상태가 되었습니다.
3) 타임존 변환하기¶
예제¶
print(ts_utc.tz_convert('US/Eastern'))
2012-03-05 19:00:00-05:00 1.764052
2012-03-06 19:00:00-05:00 0.400157
2012-03-07 19:00:00-05:00 0.978738
2012-03-08 19:00:00-05:00 2.240893
2012-03-09 19:00:00-05:00 1.867558
Freq: D, dtype: float64
tz_convert()는 tz-aware Datetime Array/Index를 다른 타임존으로 변환합니다.
4) 시간 단위 표현 변환하기¶
예제1¶
rng = pd.date_range('1/1/2012', periods=5, freq='M')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
print(ts)
2012-01-31 1.764052
2012-02-29 0.400157
2012-03-31 0.978738
2012-04-30 2.240893
2012-05-31 1.867558
Freq: M, dtype: float64
‘1/1/2012’를 시작으로하고 ‘M’ (Month) 간격을 갖는 다섯 개의 DatetimeIndex를 만들었습니다.
이어서 이 DatetimeIndex를 인덱스로 하고 임의의 난수를 갖는 Series를 만들었습니다.
예제2¶
ps = ts.to_period()
print(ps)
2012-01 1.764052
2012-02 0.400157
2012-03 0.978738
2012-04 2.240893
2012-05 1.867558
Freq: M, dtype: float64
to_period()는 Datatime Array/Index를 특정 간격을 갖는 PeriodArray/Index로 변환합니다.
예제3¶
print(ps.to_timestamp())
2012-01-01 1.764052
2012-02-01 0.400157
2012-03-01 0.978738
2012-04-01 2.240893
2012-05-01 1.867558
Freq: MS, dtype: float64
to_timestamp()는 DatetimeIndex를 주기의 시작점으로 변환합니다.
예제4¶
prng = pd.period_range('1990Q1', '2000Q4', freq='Q-NOV')
ts = pd.Series(np.random.randn(len(prng)), prng)
ts.index = (prng.asfreq('M', 'e') + 1).asfreq('H', 's') + 9
print(ts.head())
1990-03-01 09:00 -0.977278
1990-06-01 09:00 0.950088
1990-09-01 09:00 -0.151357
1990-12-01 09:00 -0.103219
1991-03-01 09:00 0.410599
Freq: H, dtype: float64
주기 (period)와 타임스탬프 (timestamp) 간의 변환에 있어서 몇몇 편리한 산술 함수를 사용할 수 있습니다.
(Time Series section 참고)