[Pandas] 시간데이터 전처리: datetime타입 형식변환 & 시간 차이 구하기
이번엔 매번 잊어먹는 시간데이터의 전처리에 대해 정리 해보려 합니다.
시간데이터를 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