[Python datetime] datetime 모듈의 데이터 유형 (data types in pandas datetime module)
Python 분석과 프로그래밍/Python 데이터 전처리 2019. 12. 21. 22:28이번 포스팅에서는 Python 표준 라이브러리(Python standard library)로 시계열 데이터의 날짜, 시간을 처리, 조작, 분석할 때 사용하는 datetime 모듈의 4가지 데이터 유형 (4 data types in datetime module in python pandas library) 에 대해서 알아보겠습니다.
(1) datetime.date: 년(year), 월(month), 일(day)
(2) datetime.time: 시간(hour), 분(minute), 초(second), 마이크로초(microsecond)
(3) datetime.datetime: date(년, 월, 일) & time(시간, 분, 초, 마이크로초)
(4) datetime.timedelta: 두 개의 datetime 값의 차이 (difference between 2 DateTime values)
--> 일(dayes), 초(seconds), 마이크로초(microseconds) 형태로 반환
이외 datetime.tzinfo, datetime.timezone 클래스가 있습니다.
[ Python standard library: 4 data types in datetime module ]
(1) datetime.date : 년(year), 월(month), 일(day) |
date.date(year, month, day) 의 형태로 년/월/일 정보를 가지는 달력의 날짜(calendar date) 데이터 객체를 생성할 수 있으며, 날짜 객체로 부터 year, month, day attribute로 년(year), 월(month), 일(day) 데이터를 추출할 수 있습니다.
import pandas as pd import datetime as dt # date: (year, month, day) mydate = dt.date(2019, 12, 21) mydate datetime.date(2019, 12, 21) print('year:', mydate.year) print('month:', mydate.month) print('day:', mydate.day) |
(2) datetime.time : 시간(hour), 분(minute), 초(second), 마이크로초(microsecond) |
datetime.time 클래스를 사용하여 시간(hour), 분(minute), 초(second), 마이크로초(microsecond)의 시계의 시간 데이터 객체를 생성, 조회할 수 있습니다.
# time: (hour, minute, second, microsecond) mytime = dt.time(20, 46, 22, 445671) mytime datetime.time(20, 46, 22, 445671) print('hour:', mytime.hour) print('minute:', mytime.minute) print('second:', mytime.second) print('microsecond:', mytime.microsecond) |
(3) datetime.datetime : date(year, month, day) |
datetime.datetime 은 위의 (1)번의 datetime.date 와 (2)번의 datetime.time 을 합쳐놓아서 날짜(date)와 시간(time) 정보를 모두 가지는 날짜-시간 객체입니다.
datetime.datetime.now() 는 현재 날짜-시간을 객체로 가져옵니다.
year, month, day, hour, minute, second, microsecond attribute를 사용하여 datetime 객체로 부터 년, 월, 일, 시간, 분, 초, 마이크로초 정보를 가져올 수 있습니다.
# datetime: (year, month, day, hour, minute, second, microsecond) now = dt.datetime.now() # current date and time now datetime.datetime(2019, 12, 21, 20, 46, 22, 445671) print('year:', now.year) print('month:', now.month) print('day:', now.day) print('hour:', now.hour) print('minute:', now.minute) print('second:', now.second) print('microsecond:', now.microsecond) |
두 개의 datetime.datetime 의 날짜-시간 객체끼리 - 연산을 통해 날짜-시간 차이를 계산할 수 있습니다.
이들 차이(delta)에 대해 days, seconds, microseconds attribute로 날짜 차이, 초 차이, 마이크로초 차이 정보를 추출할 수 있습니다.
now = dt.datetime.now() # current date and time delta = now - dt.datetime(2019, 12, 1, 23, 59, 59) delta datetime.timedelta(19, 74783, 445671) print('delta days:', delta.days) print('delta seconds:', delta.seconds) print('delta microseconds:', delta.microseconds) delta days: 19
delta seconds: 74783
delta microseconds: 445671 |
(4) datetime.timedelta : 두 개의 datetime 값 간의 차이 (the difference between 2 datetime values) |
두 개의 datetime 객체 값 간의 차이를 구할 때 timedelta 클래스를 사용하면 편리하게 특정 일/시간 차이가 나는 날짜-시간을 구할 수 있습니다.
datetime.timedelta(days, seconds, microseconds) 의 형태로 날짜-시간 차이 데이터를 저장합니다.
weeks = 1 은 7 days 로 변환되며, minutes = 1 은 60 seconds 로 변환되고, milliseconds = 1000 은 1 seconds 로 변환됩니다.
# timedelat() class import datetime as dt delta = dt.timedelta(days=1, seconds=20, microseconds=1000, milliseconds=5000, minutes=5, hours=12, weeks=2) delta datetime.timedelta(15, 43525, 1000)
# check days = 1 weeks = 2 seconds = 20 microseconds = 1000 milliseconds = 5000 minutes = 5 hours = 12 print('days:', days + 7*weeks) print('seconds:', seconds + 60*minutes + 60*60*hours + milliseconds/1000) print('microsecond:', microseconds) days: 15
seconds: 43525.0
microsecond: 1000 |
timedelta 클래스를 사용하여 각각 1 day, 1 day 10 seconds, 1 day 10 seocnds 100 microseconds 를 더해보겠습니다.
# timedelta: difference between two datetime values # (days) dt.datetime(2019, 12, 21) + dt.timedelta(1) # + 1 day datetime.datetime(2019, 12, 22, 0, 0) # (days, seconds) dt.datetime(2019, 12, 21, 23, 59, 59) + dt.timedelta(1, 10) # + 1 day 10 seconds datetime.datetime(2019, 12, 23, 0, 0, 9) # (days, seconds, microseconds) dt.datetime(2019, 12, 21, 23, 59, 59, 1000) + dt.timedelta(1, 10, 100) # + 1day 10seconds 100microseconds datetime.datetime(2019, 12, 23, 0, 0, 9, 1100) |
이번에는 위와 반대로 datetime.timedelta 클래스로 1 day, 10 seconds, 100 microseconds를 빼보겠습니다.
# minus dt.datetime(2019, 12, 21, 23, 59, 59, 1000) - dt.timedelta(1, 10, 100) datetime.datetime(2019, 12, 20, 23, 59, 49, 900) |
timedelta 클래스에 곱하기와 나누기를 적용해서 빼는 것도 가능합니다. 첫번째의 - 5 * datetime.timedelta(1) = - 5 days 를 빼라는 의미이며, 두번째의 - datetime.timedelta(10)/ 2 = - 5 days 역시 10 days를 2로 나눈 5 days를 빼라는 의미로 동일한 결과를 반환합니다.
# multiplication dt.datetime(2019, 12, 21, 23, 59, 59, 1000) - 5 * dt.timedelta(1) datetime.datetime(2019, 12, 16, 23, 59, 59, 1000) # divide dt.datetime(2019, 12, 21, 23, 59, 59, 1000) - dt.timedelta(10) / 2 datetime.datetime(2019, 12, 16, 23, 59, 59, 1000) |
pandas Timestamp 클래스를 이용한 날짜-시간 입력, 변환, 정보조회 방법은 https://rfriend.tistory.com/497 를 참고하세요.
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요.