Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백준
- 코딩테스트
- python
- programmers
- 자료구조
- Join
- 정보처리기사 c언어
- 가상환경
- pandas
- aws jupyter notebook
- Matplotlib
- String Method
- Algorithm
- 프로그래머스
- dataframe
- Stack
- 노마드코딩
- 데이터시각화
- 알고리즘
- 알고리즘 스터디
- type hint
- Selenium
- MySQL
- 알고리즘스터디
- 선그래프
- queue
- openCV
- javascript
- 파이썬
- NumPy
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
[Pandas] 시계열 데이터 생성, 변환, 분리, 인덱싱(to_datetime, to_period, date_range, period_range 등) 본문
Python/Numpy & Pandas
[Pandas] 시계열 데이터 생성, 변환, 분리, 인덱싱(to_datetime, to_period, date_range, period_range 등)
all_sound 2022. 10. 5. 14:53시계열 데이터
- 판다스는 주식, 환율 등 금융 데이터를 다루기 위해 개발된 라이브러리
- 시계열(time series) 데이터를 다루는 여러가지 유용한 기능 제공
- 시계열 데이터를 데이터프레임의 행 인덱스로 사용하면 시간으로 기록된 데이터 분석에 매우 편리
- 판다스 시간 표시 방식 중 시계열 데이터 표현에 자주 이용되는 두가지 유형
- 특정한 시점을 기록하는 Timestamp
- 두 시점 사이의 일정한 기간을 나타내는 Period
다른 자료형을 Timestamp 객체로 변환
▶ 문자열을 Timestamp로 변환
- 판다스 to_datetime() 함수 : 다른 자료형을 판다스 Timestamp를 나타내는 datetime64 자료형으로 변환
# stock-data.csv 파일 불러오기
df = pd.read_csv('/content/drive/MyDrive/ Encore Prac/stock-data.csv')
df.head(5)
# Date 열 데이터 타입 확인
df.dtypes
# Date열을 Timestamp 객체로 변경해서 new_Date 열에 저장
df['new_Date'] = pd.to_datetime(df.Date)
# new_Date 값 확인
df.new_Date[0]
# Timestamp('2018-07-02 00:00:00')
#데이터 타입 확인
type(df.new_Date[0])
# pandas._libs.tslibs.timestamps.Timestamp
# index를 new_Date로 변경
df.set_index('new_Date', inplace=True)
# Date 열 삭제
df.drop('Date', axis=1)
# 바뀐 인덱스 확인
df.index
Timestamp를 Period로 변환
- 판다스 to_period() 함수 : Timestamp 객체를 일정 기간을 나타내는 Period 객체로 변환
- freq 옵션에 기준이 되는 기간 설정
▶ freq 옵션
옵션 | 설명 | 옵션 | 설명 |
D | day(1일) | B | business day(휴일 제외) |
W | week(1주) | H | hour(1시간) |
M | month end(월 말) | T | minute(1분) |
MS | month begin(월 초) | S | second(1초) |
Q | quarter end(분기 말) | L | millisecond(1/1,000초) |
QS | quarter begin(분기 초) | U | microseond(1/1,000,000초) |
A | year end(연말) | N | nanoseconed(1/1,000,000,000초) |
AS | year begin(연초) | ... | ... |
▶Timestamp를 Period로 변환
# 문자열 데이터(시리즈객체)를 판다스 Timestamp로 변환
dates = ['2019-01-01', '2020-03-01', '2021-06-01']
ts_dates = pd.to_datetime(dates)
ts_dates
# DatetimeIndex(['2019-01-01', '2020-03-01', '2021-06-01'], dtype='datetime64[ns]', freq=None)
#Timestamp를 Period로 변환
pr_day = ts_dates.to_period(freq='D') # day 옵션(년+월+일)
print(pr_day)
pr_month = ts_dates.to_period(freq='M') # month 옵션(년+월)
print(pr_month)
pr_year = ts_dates.to_period(freq='A') # year 옵션(년)
print(pr_year)
# PeriodIndex(['2019-01-01', '2020-03-01', '2021-06-01'], dtype='period[D]')
# PeriodIndex(['2019-01', '2020-03', '2021-06'], dtype='period[M]')
# PeriodIndex(['2019', '2020', '2021'], dtype='period[A-DEC]')
시계열 데이터 만들기
- data_range() : 여러 개의 날짜가 들어 있는 Timestamp 시계열 데이터 생성
- period_range() : 여러 개의 기간이 들어 있는 Period 시계열 데이터 생성
- 옵션 => (start: 날짜 범위의 시작, end: 날짜 범위의 끝, periods: 생성할 타임스템프의 개수, freq : 시간 간격, tz: timezone(Asia/Seoul)
▶ date_range
# 2022-01-01 부터 월의 첫날짜를 한달 간격으로 6개 생성
pd.date_range(start='2022-01-01', periods=6, freq='MS', tz='Asia/Seoul')
'''DatetimeIndex(['2022-01-01 00:00:00+09:00', '2022-02-01 00:00:00+09:00',
'2022-03-01 00:00:00+09:00', '2022-04-01 00:00:00+09:00',
'2022-05-01 00:00:00+09:00', '2022-06-01 00:00:00+09:00'],
dtype='datetime64[ns, Asia/Seoul]', freq='MS')'''
# 한달 간격으로 각 달의 마지막 날짜를 6개 생성
pd.date_range(start='2022-01-01', periods=6, freq='M')
'''DatetimeIndex(['2022-01-31', '2022-02-28', '2022-03-31', '2022-04-30',
'2022-05-31', '2022-06-30'],
dtype='datetime64[ns]', freq='M')'''
# 분기(3개월) 간격, 월의 마지막 날짜를 6개 생성
pd.date_range(start='2022-01-01', periods=6, freq='3M')
#freq='3M': 해당 날짜를 기준으로 분기 길이를 자유롭게 조정가능
'''DatetimeIndex(['2022-01-31', '2022-04-30', '2022-07-31', '2022-10-31',
'2023-01-31', '2023-04-30'],
dtype='datetime64[ns]', freq='3M')'''
pd.date_range(start='2022-01-01', periods=6, freq='Q')
# freq='Q': 정해져 있는 분기말 날짜
'''DatetimeIndex(['2022-03-31', '2022-06-30', '2022-09-30', '2022-12-31',
'2023-03-31', '2023-06-30'],
dtype='datetime64[ns]', freq='Q-DEC')'''
▶ period_range()
#period 배열 만들기
# 2022-01-01부터 한달 길이 객체 3개 생성
pd.period_range(start='2022-01-01', periods=3, freq='M')
# PeriodIndex(['2022-01', '2022-02', '2022-03'], dtype='period[M]')
# 2022-01-01부터 2시간 길이 객체 3개 생성
pd.period_range(start='2022-01-01', periods=3, freq='2H')
# PeriodIndex(['2022-01-01 00:00', '2022-01-01 02:00', '2022-01-01 04:00'], dtype='period[2H]')
날짜 데이터 분리
# 데이터 확인
df.head(3)
# Timestamp객체의 연, 월, 일 각각 추축해서 새로운 열 생성
df['year'] = df['new_Date'].dt.year
df['month'] = df['new_Date'].dt.month
df['day'] = df['new_Date'].dt.day
# 데이터 확인
df.head(3)
# Timestamp를 Period로 변환하여 년원일 표기 변경하기, freq 옵션 사용
df['Date_yr'] = df['new_Date'].dt.to_period(freq='A')
df['Date_m'] = df['new_Date'].dt.to_period(freq='M')
# 추출한 날짜 정보 Date_m 열을 데이터 프레임의 행 인덱스로 지정
df.set_index('Date_m', inplace=True)
df.head(3)
날짜 인덱스 활용
# 2018년 데이터 인덱싱
df.loc['2018'].head(3)
# 2018년 6월 데이터 인덱싱
df.loc['2018-06'].head(3)
df['2018-06'].head(3) #열 지정 방식으로도 인덱싱 가능
# 2018년 6월의 Start, High 열 데이터 인덱싱
df.loc['2018-06', ['Start', 'High']].head(3)
# 데이터 정렬 후 구간 인덱싱
df.sort_index().loc['2018-06-20': '2018-06-25']
'Python > Numpy & Pandas' 카테고리의 다른 글
[Pandas] 데이터프레임 연결 (concat, merge, join) (0) | 2022.10.07 |
---|---|
[Pandas] 함수 매핑(mapping) / apply, applymap, pipe (0) | 2022.10.06 |
[Pandas] 범주형(category) 데이터처리 / 구간분할(pd.cut, np.histogram) (0) | 2022.10.04 |
[Pandas] 데이터 전처리 / 데이터 단위 변경, 데이터 타입 변경 (0) | 2022.10.04 |
[Pandas] 데이터 전처리 / 중복 데이터 확인 및 제거 (duplicated, drop_duplicates) (0) | 2022.10.02 |