본문 바로가기

빅데이터분석기사_실기/기초

날짜 데이터

import pandas as pd

file_path = '/content/drive/MyDrive/data/temperatures.csv'
data = pd.read_csv(file_path)

df = data.copy()

#실습데이터를 준비해보아용~

df.head()

df.info()​

But~ Date 컬럼의 데이터타입이 날짜형이 아닌 문자열임을 확인할 수 있당! 

결과

문자형을 날짜형으로 변경하기

  • 날짜 계산을 위해 날짜형으로 변경
  • pd.to_datetime(데이터변수['컬럼명'], format = '날짜형식'

날짜형식

  • %Y: 4자리 연도
  • %y: 2자리 연도
  • %m: 월
  • %d: 일
  • %H: 시간
  • %M: 분
  • %S: 초
df['Date1'] = pd.to_datetime(df['Date'], format = '%Y-%m-%d')​

df의 Date 컬럼을 날짜형 (형식은 네자리연도-월-일)으로 변경하여 새로운 컬럼 Date1을 생성함

df.head()


날짜형의 형식을 변경하기

  • 데이터변수['컬럼명'].dt.strftime('날짜형식')
df['Date1'].dt.strftime('%Y-%m')

4자리연도-월 형식으로 변경

df['Date1'].dt.strftime(%m-%d %H:%M)

월-일 시각:분 형식으로 변경

시간데이터가 없기 때문에 00:00 값으로 세팅됨


dt 연산자

  • year: 연도
  • month: 월
  • day: 일
  • dayofweek: 요일을 숫자로 (0: 월요일 ~ 6:일요일)
  • day_name(): 요일을 문자열로
df['year'] = df['Date1'].dt.year
#년도만 추출해서 새로운 컬럼으로
df['month'] = df['Date1'].dt.month
#월만 추출해서 새로운 컬럼으로
df['day'] = df['Date1'].dt.day
#일만 추출해서 새로운 컬럼으로
df['dayofweek'] = df['Date1'].dt.dayofweek
#요일을 숫자로 나타내서 새로운 컬럼으로
df['dayname'] = df['Date1'].dt.day_name()
#요일을 문자로 나타내서 새로운 컬럼으로

df.head()


날짜 연산

  • day 연산: pd.Timedelta(days=숫자)
  • month 연산: pd.DateOffset(months=숫자)
  • year 연산: pd.DateOffset(years=숫자)
df['plus day1'] = dt['Date1'] + pd.Timedelta(days=1)

Date1에 하루를 더한 날짜데이터를 plus day1이라는 새로운 컬럼으로..

df['plus day7'] = df['Date1'] + pd.Timedelta(days=7)

Date1에 일주일을 더한 날짜 데이터를 plus day7이라는 새로운 컬럼으로..

df['minus day7'] = df['Date1'] - pd.Timedelta(days=7)

Date1에 일주일을 뺀 날짜 데이터를 minus day7이라는 새로운 컬럼으로..

from pandas.tseries.offsets import DateOffset

df['plus month1'] = df['Date1'] + DateOffset(months=1)

Date1에 한달을 더한 데이터를 plus month1이라는 새로운 컬럼으로..

df['minus month3'] = df['Date1'] - DateOffset(months=3)

Date1에 세 달을 뺀 데이터를 minus month3 이라는 새로운 컬럼으로..

df['plus year1'] = df['Date1'] + DateOffset(years=1)

Date1에 1년을 더한 데이터를 plus year1 이라는 새로운 컬럼으로..

df['minus year3'] = df['Date1'] - DateOffset(years=3)

Date1에 3년을 뺀 데이터를 minus year3라는 새로운 컬럼으로..


날짜 구간 데이터 생성하기

  • pd.date_range(start='시작일자', end='종료일자', periods=기간수, freq='주기')

freq 주기

  • D: 일별
  • W: 주별
  • M: 월별 (말일)
  • MS: 월별 (시작일)
  • A: 연도별 (말일)
  • AS: 연도별 (시작일)
pd.date_range(start='2020-01-01', periods=30, freq='D')

일별로 30기간, 즉 하루씩 30개 구간 데이터

2020-01-01부터 2020-01-30까지

결과

pd.date_range(start='2020-01-01', end='2023-06-30', freq='M')

2020-01-01부터 월 단위(월의 마지막 날)로 2023-06-30까지의 구간데이터 생성

결과

pd.date_range(start='2020-01-01',end='2023-06-30',freq='MS')

2020-01-01부터 월 단위(월의 첫번째 날)로 2023-06-30까지의 구간 데이터 생성

결과

pd.date_range(start='2020-01-01',end='2023-06-30',freq='A')

2020-01-01부터 2023-06-30까지 연 단위(매년 마지막 날)로 구간 데이터 생성

결과) 2020-12-31, 2021-12-31, 2022-12-31

pd.date_range(start='2020-01-01', end='2023-06-30', freq = 'AS')

2020-01-01부터 2023-06-30까지 연 단위(매년 첫째 날)로 구간 데이터 생성

결과) 2020-01-01, 2021-01-01, 2022-01-01, 2023-01-01


rolling() 기간 이동 계산

  • 데이터['컬럼명'].rolling(숫자).집계함수

df1.head()

df1['ma7'] = df1['Temp'].rolling(7).mean()

7일 이동평균 컬럼 ma7: 행을 아래로 이동하면서 해당 행 포함 직전 7행의 평균을 구함

해당 행 포함 직전 7행이 존재하는 7번째 행(인덱스=6)부터 값이 존재한다.

결과

df1['Temp'].rolling(7).sum()

해당 행 포함 직전 7개 행의 합

df1['Temp'].rolling(7).min()
df1['Temp'].rolling(7).max()

 

해당 행 포함 직전 7개 행들 중 최솟값, 최댓값


행 이동하기

  • 데이터['컬럼명'].shift(이동할 행의 수)

df2.head()

df2['Temp shift1'] = df2['Temp'].shift(1)

df2.head()

Temp 컬럼 데이터들이 행 하나씩 밀린 것을 확인할 수 있다.

df2['pct change'] = (df2['Temp shift1'] - df2['Temp']) / df2['Temp']

df2.head()

이를 통해 증감률을 쉽게 구할 수 있음

df2['Temp'].shift(-1).head(10)

shift 숫가 값에 음수를 넣으면 행이 반대 방향으로 밀린다! (아래->위)

결과

 

'빅데이터분석기사_실기 > 기초' 카테고리의 다른 글

데이터 결합  (0) 2024.06.11
데이터가공: apply, map, 문자열 다루기  (0) 2024.06.11
데이터 타입 변환하기  (0) 2024.05.30
결측값 처리하기  (0) 2024.05.30
인덱스, 행, 그리고 열  (0) 2024.05.30