파이썬은 datetime 모듈을 이용한다.
datetime 모둘은 날짜/시간 관련 타입으로 date, time, datetime 클래스를 제공한다.
판다스는 Timestamp, 단일 타입을 사용한다.
Timestamp는 나노초(10억분의 1초)의 정밀도를 가진다.
파이썬과 판다스모두 timedelta를 이용해 일시의 차이를 관리한다.
import datetime
d = datetime.date(year=2023, month=1, day=2)
t = datetime.time(hour=14, minute=40, second=20, microsecond=999999)
dt = datetime.datetime(year=2022, month=12, day=30, hour=11, minute=30, second=10, microsecond=999999)
print(f"date: {d}\ntime: {t}\ndatetime: {dt}")
date: 2023-01-02
time: 14:40:20.999999
datetime: 2022-12-30 11:30:10.999999
-------------------------------------
# 실행시점의 날짜, 일시 조회도 가능하다.
from datetime import datetime, time, date
print('현재날짜:', date.today())
print('현재 일시:', datetime.now())
현재날짜: 2023-01-22
현재 일시: 2023-01-22 21:30:56.958436
# 현재 시간에 설정한 시간 빼기/더하기
from datetime import timedelta
tdelta = timedelta(weeks=2, days=3, hours=5, minutes=30, seconds=30, milliseconds=100, microseconds=100000)
c = datetime.now()
print(c)
print(c - tdelta)
print(c + tdelta)
2023-01-22 21:36:46.639851
2023-01-05 16:06:16.439851
2023-02-09 03:07:16.839851
----------------------------------
date(2023,1,22) - date(2023,1,1)
# 벌써 21일이나 지난걸 확인 했다.
datetime.timedelta(days=21)
# strftime()
today = date.today()
dow = list('월화수목금토일')
print(dow)
# datetime.weekday => 요일을 정수로 반환해준다. (0: 월요일, 6: 일요일)
# 리스트 인덱스 6번인 일요일 반환.
print(dow[today.weekday()])
print(today)
print(today.strftime(f'%Y년 %m월 %d일 %a {dow[today.weekday()]}요일'))
curr = datetime.now()
print(curr)
print(curr.strftime('%Y/%m/%d %H, %I %p'))
['월', '화', '수', '목', '금', '토', '일']
일
2023-01-22
2023년 01월 22일 Sun 일요일
2023-01-22 21:42:01.785412
2023/01/22 21, 09 PM
-----------------------------------
# strptime
#문자열 -> datetime
s = '2000년 10월 30일'
datetime.strptime(s,'%Y년 %m월 %d일')
datetime.datetime(2000, 10, 30, 0, 0)
import pandas as pd
# 직접 원하는 일시를 넣어서 생성
pd.Timestamp(year=2020, month=11, day=21, hour=17, minute=30, second=10, microsecond=1, nanosecond=1)
Timestamp('2020-11-21 17:30:10.000001001')
--------------------------------------
# 날짜 : '/'나 '-'로 구분자를 사용
# 시간: ':'을 구분자로 사용
# 더 간단하다.
pd.Timestamp('2023/1/12 12:24:30.12111')
pd.Timestamp('2023-1-12 12:24:30.12111')
Timestamp('2023-01-12 12:24:30.121110')
-------------------------------------
# 기준은 유닉스 타입이다.
# 10년 경과한 날짜
print(pd.Timestamp(10, unit='Y'))
# 10개월 경과한 날짜
print(pd.Timestamp(10, unit='M'))
# 10주 경과한 날짜
print(pd.Timestamp(10, unit='W'))
1980-01-01 10:12:00
1970-11-01 08:51:00
1970-03-12 00:00:00
# day
s1 = pd.Series([10,100,1000,10000])
pd.to_datetime(s1, unit='D')
0 1970-01-11
1 1970-04-11
2 1972-09-27
3 1997-05-19
dtype: datetime64[ns]
--------------------------------------
# 년 월 일 포멧을 to_datetime이 모른다.
s3 = pd.Series(['2000년 01월 01일', '2001년 03월 10일', '2023년 10월 12일'])
pd.to_datetime(s3)
parsing error 발생
-------------------------------------
# 형식을 지정해 주면 년 월 일 포멧도 사용 가능.
s3 = pd.Series(['2000년 01월 01일', '2001년 03월 10일', '2023년 10월 12일'])
pd.to_datetime(s3, format='%Y년 %m월 %d일')
0 2000-01-01
1 2001-03-10
2 2023-10-12
dtype: datetime64[ns]
s1 = pd.to_datetime(pd.Series(['2010-01-01','2010-03-01','2010-06-01']))
s2 = pd.to_datetime(pd.Series(['2012-01-01','2012-03-01','2012-06-01']))
print(s1)
print(s2)
0 2010-01-01
1 2010-03-01
2 2010-06-01
dtype: datetime64[ns]
0 2012-01-01
1 2012-03-01
2 2012-06-01
dtype: datetime64[ns]
---------------------------------------
# 같은 인덱스의 원소끼리의 날짜 차이 계산
result = s2 - s1
result
0 730 days
1 731 days
2 731 days
dtype: timedelta64[ns]
--------------------------------------
# TimeDelta 객체 생성
t_delta = pd.Timedelta(days=3)
t_delta2 = pd.Timedelta(weeks=2, days=3)
# s1의 날짜에서 2주 3일 전 날짜를 계산
print(s1 - t_delta2)
0 2009-12-15
1 2010-02-12
2 2010-05-15
dtype: datetime64[ns]