이번 포스팅에서는 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)

year: 2019
month: 12
day: 21





  (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)

hour: 20
minute: 46
second: 22
microsecond: 445671





  (3) datetime.datetime : date(year, month, day)
                                  & time(hour, minute, second, microsecond)


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)

year: 2019
month: 12
day: 21
hour: 20
minute: 46
second: 22
microsecond: 445671




두 개의 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 를 참고하세요. 


많은 도움이 되었기를 바랍니다. 

이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요. 



728x90
반응형
Posted by Rfriend
,