python
[시계열 분석] 날짜, 시간 자료형, 도구 - datetime, 문자열변환, pandas 이용
datadeveloper
2022. 4. 21. 07:27
반응형
[시계열 분석] 날짜, 시간 자료형, 도구 - datetime, 문자열변환, pandas 이용
1) datetime
from datetime import datetime
now = datetime.now()
print(now) # 2022-04-20 21:32:09.347718
print(now.year, now.month, now.day) # 2022 4 20
delta = datetime(2022,1,7) - datetime(2008,6,24,8,15)
print(delta) # 4944 days, 15:45:00
print(delta.days) # 4944
print(delta.seconds) # 56700
# timedelta를 더하거나 빼면 그만큼의 시간이 datetime객체에 적용되어 새로운 객체를 만듦
# date : 그레고리언 달력을 사용해서 날짜(년,월,일)를 지정
# time : 하루 중 시간을 시, 분, 초, 마이크로초 단위로 저장
# datetime : 날짜와 시간을 같이 저장
# timedelta : 두 datetime 값 간의 차이(일,초,마이크로초)를 표현
from datetime import timedelta
start = datetime(2011,1,7)
print(start+timedelta(12)) # 2011-01-19 00:00:00
print(start-2*timedelta(12)) # 2010-12-14 00:00:00
2) 문자열을 datetime으로 변환하기
# datetime 객체와 나중에 소개할 pandas의 Timestamp 객체는 str 매서드나 strftime메서드에 포맷규책을 넘겨 문자열로 나타낼 수 있음
stamp = datetime(2011,1,3)
print(str(stamp)) # 2011-01-03 00:00:00
print(stamp.strftime('%Y-%m-%d')) # 2011-01-03
value = '2011-01-03'
print(datetime.strptime(value,'%Y-%m-%d'))
datestrs = ['7/6/2011','8/6/2011']
[datetime.strptime(x,'%m/%d/%Y') for x in datestrs]
# datetime.strptime 는 알려진 형식의 날짜를 파싱하는 최적의 방법
# 하지만 매번 포멧 규칙을 따라야하는건 귀찮은일임
# 흔히 쓰는 날짜에 대해서 서드파티 패키지인 dateutil에 포함된 parser.parse메서드 사용
# dateutil 은 거의 대부분이 사람이 인지하는 날짜 표현 방식 파싱
from dateutil.parser import parse
parse('2011-01-03')
parse('Jan 31,1997 10:45 PM')
parse('6/12/2011', dayfirst=True) # 국제 로케일의 경우 날짜가 월 앞에 오는 경우는 매우 흔함. 이런 경우 dayfirst=True 넣어줌
# 출력값 : datetime.datetime(2011, 1, 3, 0, 0)
3) pandas
# pandas는 일반적으로 DataFrame 의 칼럼이나 축 색인으로 날짜가 담긴 배열을 사용
# to_datetime 메서드는 많은 종류의 날짜 표현을 처리
import pandas as pd
print(datestrs) # ['7/6/2011', '8/6/2011'] 위에 정의해 놓은 값임
print(pd.to_datetime(datestrs)) # DatetimeIndex(['2011-07-06', '2011-08-06'], dtype='datetime64[ns]', freq=None)
# 누락된 값 None, 빈 문자열로 간주되어야할 값도 처리해줌
idx = pd.to_datetime(datestrs + [None])
print(idx) # DatetimeIndex(['2011-07-06', '2011-08-06', 'NaT'], dtype='datetime64[ns]', freq=None)
print(idx[2]) # NaT
pd.isnull(idx) # array([False, False, True])
반응형