데이터분석과 개발

[Pandas] 시간데이터 전처리: datetime타입 형식변환 & 시간 차이 구하기 본문

AI(시계열)/데이터 전처리

[Pandas] 시간데이터 전처리: datetime타입 형식변환 & 시간 차이 구하기

긍정적인마인드 2023. 1. 2. 22:10

이번엔 매번 잊어먹는 시간데이터의 전처리에 대해 정리 해보려 합니다.

시간데이터를 datetime형식으로 만들어 줬을 때, 원하는 기간의 데이터를 쉽게 추출할 수 있어지는 

큰 장점이 생깁니다.

 

예를 들어 datetime형식으로 인덱스를 만들어주게 되면

df.loc['2022-01-11' : '2022-10-31'] 를 통해 원하는 2022년 일 데이터를 가져올 수도 있고

df.loc['2022-02' : '2022-08'] 를 통해 2월부터 8월 데이터를 가져올 수도 있습니다.

 

이런 장점을 활용하기 위해선 datetime형식을 잘 바꿔줘야 합니다. 라고 하지만 저도 자주 까먹어서 여기에 정리해보려합니다.

 

1. 문자열을 datetime 형식으로 바꾸기

 

(1) datetime

 

문자열의 날짜 년월일을 구분해주는 '-' 를 사용하여 %Y-%m-%d 형식으로  datetime형식으로 바꿔줄 수 있습니다.

월, 일을 적어주지 않는다면 1월, 1일 으로 나타내어지는 것을 알 수 있습니다.

import pandas as pd
from datetime import datetime

## 문자열-> datetime 형식
# 년 월 일 문자열
print(datetime.strptime('2022-11-30','%Y-%m-%d'))

## 년 월 문자열
print(datetime.strptime('2022-11','%Y-%m'))

# 년도 문자열
print(datetime.strptime('2022','%Y'))

(2) pd.to_datetime

 

datetime 모듈과 사용법이 같지만 판다스의 to_datetime형식이 조금 더 날짜 형식에 구애받지 않고 쉽게 datetime형식으로 바꿀 수 있다고 합니다!

import pandas as pd
from datetime import datetime

## 문자열-> datetime 형식
# 년 월 일 문자열
print("문자열 2022-11-30 :",pd.to_datetime('2022-11-30'))

# 년 월 문자열
print("문자열 2022-11-30 :",pd.to_datetime('2022-11'))

# 년도 문자열
print("문자열 2022-11-30 :",pd.to_datetime('2022'))

 

 

2.  datetime형식을 문자열로 바꾸기

 

import pandas as pd
from datetime import datetime

now = datetime.now()
print('현재시간: ',now)

# datetime.strftime 사용
print('datetime사용 :', datetime.strftime(now,'%Y-%m-%d'))

# 문자열 형식 바꿀 수 있음
print('datetime사용 :', datetime.strftime(now,'%Y/%m/%d'))

# str 사용
print('str사용: ', str(now))

# str사용 년월일만
print('str사용: ', str(now)[:10])

 

3. datetime 단위

 

1시간 뒤, 1일 뒤 처럼 일정한 시간 이전이나 이후를 나타내고 싶을때가 있습니다. 그 방법들에 대해 소개해보려 합니다.

 

(1) pd.Timedelta

import pandas as pd

# 1시간
print(pd.Timedelta(hours=1))

# 1일
print(pd.Timedelta(days=1))

# 1주
print(pd.Timedelta(weeks=1))

# 한달
print(pd.Timedelta(months=1))

pd.Timedelta를 통해 한달이라는 시간은 표현할 수가 없습니다.

아마 제 생각엔 달마다 일 수가 달라서이지 않을까 싶습니다.

 

 

지금부터 모듈들은 시간을 전문적으로 표현할 수 있는 모듈입니다!  구글링을 해보시면 영업일, 매주 3번째 월요일 등과 같이 특별한 시간을 나타낼 수도 있지만 여기서는 시간차이 계산만 보여드리겠습니다.

 

(2) Dateoffset 함수

 

from pandas.tseries.offsets import DateOffset
ts = pd.Timestamp('2017-01-01 09:10:11')
ts + DateOffset(months=3)

# 출력값
Timestamp('2017-04-01 09:10:11')

 

(3) relativedelta 함수

 

from datetime import datetime
from dateutil.relativedelta import relativedelta

now = datetime.now()
print("현재시간 :", now)

# 한달 뒤
print("한달 뒤: ", now + relativedelta(months=1))

 

출처:

https://dateutil.readthedocs.io/en/stable/relativedelta.html

https://pandas.pydata.org/docs/reference/api/pandas.tseries.offsets.DateOffset.html

 

relativedelta — dateutil 2.8.2 documentation

© Copyright 2019, dateutil Revision 6b035517.

dateutil.readthedocs.io