일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pandas # 월말 날짜 # 마지막 주 # 날짜계산 # 시계열 # 마지막 주 금요일
- 년월일 데이터
- 시계열 #reindex #인덱스 확장 #datetime index #index extention # 데이터전처리
- 시계열
- 시간형식변환
- stl
- 크롤링자동화
- 파이프라인전처리
- 빈 데이터프레임 #pandas #데이터전처리
- 플로틀리
- 이수역 양식집
- loess
- 시계열모듈
- adf_test
- 리눅스개념
- timeseries decomposition
- 확률
- 시계열분해
- Python
- 오제이튜브
- pandas
- np.split
- 음수값 #전처리 #선형보간 #pandas #데이터 #데이터분석
- seaborn # kdeplot # 데이터분석
- 시계열데이터셋
- 날짜파싱
- 시계열시각화
- 응용이 보이는 선형대수
- 짧은 시계열 # 금융시계열
- 시간형식
- Today
- Total
데이터분석과 개발
[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
'AI(시계열) > 데이터 전처리' 카테고리의 다른 글
[Pandas] 년,월,일 따로 있는 데이터 읽기 : parse_dates, date_parser, index_col (0) | 2023.01.08 |
---|---|
[전처리] 전처리 파이프라인 구축하기(1) (0) | 2023.01.07 |
[전처리] 시계열 데이터에서 train, validation, test 나누기 (0) | 2023.01.04 |
[Pandas] 원하는 데이터타입 컬럼 추출하기: df.dtypes, df.select_dtypes (0) | 2023.01.01 |