Python : 05. Time_Series

yeppi1802·2024년 6월 22일

05 Time_Series 실습

❇️ 요약

  • datetime

배운 것설명
pd.to_datetime()데이터 타입을 datetime 형으로 전환
dt.yeardatetime객체에서 년도만 추출
dt.weekdaydatetime객체에서 요일 추출 (월:0 ~ 일:6)
datetime.date()날짜 정보만 추출 하는데 사용, datetime 객체에서 시간정보를 제외한 date객체 반환
mean(numeric_only=True)숫자에 대해서만 평균 값
fillna(method = 'ffill')first fill 약자, 결측값 자리에 앞에 있는걸로 채워라
fillna(method='bfill')back fill 약자, 결측값 자리에 뒤에 있는 걸로 채워라
dt.to_period()DatetimeIndex를 PeriodIndex로 변환하는 메서드
rolling(n)n 행수에 대한 데이터 모음
datetime.timedeltadatetime 객체의 더하기, 빼기를 수행 가능
dt.day_name()요일을 문자열로 치환
pivot()데이터의 열을 기준으로 피벗테이블로 변환시키는 메서드
diff()한 객체 내에서 열과 열 / 행과 행의 차이를 출력하는 메서드
set_index기존의 열을 인덱스로 설정하는 메서드

📖 자세히

[함수 참고 - [Python 완전정복 시리즈] 2편 : Pandas DataFrame 완전정복]

🔆 pd.to_datetime()

  • 기본형태
pd.to_datetime(series, format, errors)

series : datetime 형태로 전환 하려는 열

format : datetime의 형태 지정

errors : 오류를 불러일으킬지 결정하는 인수, 보통 error = ‘raise’ 형태로 사용

포맷코드설명포맷코드설명
%y년도(2자리)23%b월의 줄임말Jan
%Y년도(4자리)2023%BJanuary
%m월값 (01 ~ 12 월)[01,12]%pAM or PMAM
%d일값 (01 ~ 31 일)[01,31]%c날짜와 시간을 출력함.Thu May 25 10:13:52 2023
%H시간(24시간)[00,23]%j1년 중 누적 날짜[001,366]
%I시간(12시간)[01,12]%U1년 중 누적 주(일요일 시작)[00,53]
%M두자리 분(00 ~ 59 분)[01,59]%W1년 중 누적 주(월요일 시작)[00,53]
%S초(2자리)[00,59]%x현재 설정된 지역에 기반한 날짜 출력05/25/23
%a요일의 줄임말Mon%X현재 설정된 지역에 기반한 시간 출력17:22:21
%A요일Monday%Z시간대 출력대한민국 표준시
%w숫자로 된 요일[0(일), 6(토)]%%문자 %%
%F%Y-%m-%d 의 약어(shortcut)2024-01-01
%D%Y/%m/%d 의 약어(shortcut)2024/01/01

🔆 mean()

  • 기본형태
df.mean(axis=None, skipna=None, level=None, numeric_only=None, kwargs)

axis : {0 : index / 1 : columns} 계산의 기준이 될 축

skipna : 결측치를 무시할지 여부

level : Multi Index의 경우 연산을 수행할 레벨

numeric_only : 숫자, 소수, 부울만 이용할지 여부

kwargs : 함수에 전달할 추가 키워드

🔆 to_period

  • 기본형태
df.to_period(freq=None, axis=0, copy=True)

freq : 원하는 시간 단위로 변환 가능

axis : 변환할 기준 축

copy : 사본을 형성할지 여부

기본적인 사용법

freq값을 지정하여 원하는 시간간격으로 출력이 가능

freq="Y"

print(idx.to_period("Y"))
>>
PeriodIndex(['2021', '2021', '2021', '2021', '2022'], dtype='period[A-DEC]')

freq="M"

print(idx.to_period("M"))
>>
PeriodIndex(['2021-08', '2021-09', '2021-10', '2021-12', '2022-01'], dtype='period[M]')

freq="W"

print(idx.to_period("W"))
>>
PeriodIndex(['2021-07-26/2021-08-01', '2021-09-13/2021-09-19',
             '2021-10-25/2021-10-31', '2021-12-13/2021-12-19',
             '2022-01-24/2022-01-30'],
            dtype='period[W-SUN]')

freq="H"

print(idx.to_period("H"))
>>
PeriodIndex(['2021-08-01 00:00', '2021-09-15 00:00', '2021-10-30 00:00',
             '2021-12-14 00:00', '2022-01-28 00:00'],
            dtype='period[H]')

🔆 rolling()

  • 기본형태
df.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, 
           closed=None, method='single')

window : 계산할 창(window)의 크기 / 열 기준으로 계산할 경우 행의 수

min_periods : 계산할 최소 크기(기간) / window 안의 값의 수가 min_periods의 값보다 작을 경우 NaN을 출력 / 기본적으로 window 크기와 동일

center : {True / False} 레이블을 window의 중간에 둘지 여부 / 기본값은 False로 레이블이 창 우측에 위치

win_type : {'triang' / 'gaussian' / ...} 가중치를 넣어 계산할 경우 계산 방식 / 때에 따라 연산 메서드에 추가 인수를 지정해야할수도 있다

on : 시계열 인덱스나, 시계열과 유사한 열이 있을 경우 이 열을 기준으로 rolling을 수행 가능

axis : 계산의 기준이 될 축

closed : {'left' / 'right' / 'both' / 'neither'} window가 닫히는 방향

method :{'single' / 'table'} numba 를 이용하여 테이블 계산을 진행하여 속도를 높힐지 여부 / 현재 'single'만 사용가능

🔆 datetime.timedelta

timedelta에는 다음 표와 같은 매개변수를 사용할 수 있다.

항목설명
days
seconds
microseconds마이크로 초
milliseconds밀리 초 (1밀리 초는 1000마이크로 초)
minutes
hours시간
weeks주 (7일을 의미함)

🔆 pivot()

  • 기본형태
df.pivot(index=None, columns=None, values=None)

index : 인덱스로 사용될 열

columns : 열로 사용될 열

values : 값으로 입력될 열

※ index나 columns에 리스트를 입력 할 경우 멀티 인덱스로 피벗테이블이 생성

values에 리스트를 입력 할 경우 각 값에 대한 테이블이 연속적으로 생성

🔆 diff()

  • 기본형태
df.diff(periods=1, axis=0)

axis : 비교할 축을 지정

periods : 비교할 간격을 지정 / 기본은 +1로 바로 이전 값과 비교

🔆 set_index()

  • 기본형태
df.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)

keys : 인덱스로 설정할 열의 이름 /  list형태로 설정할 경우 Multi Index로 설정

drop : 인덱스로 설정한 열을 기존 열에서 제거할지 여부 / 기본값은 True로 열에서 제거

append : 기존 인덱스를 유지하면서 새 인덱스를 추가할 지 여부

inplace : pandas 공통 인수로 원본을 대체할지 여부

verify_integrity : 추가하려는 인덱스에 중복 값이 있을 경우 오류를 띄울지 여부

0개의 댓글