파이썬의 datetime은 iterable 하지 않다.
그래서 넘파이 라이브러리에선 이를 보강해, array도 처리할 수 있는 datetime64 클래스를 만들었다.
넘파이를 기반으로 하는 판다스에서도 사용가능하다.
import numpy as np
someday = np.array('2022-05-11', dtype= np.datetime64)
someday
>>> array('2022-05-11', dtype='datetime64[D]')
someday + 10
>>> numpy.datetime64('2022-05-21')
someday - 35
>>> numpy.datetime64('2022-04-06')
someday + np.arange(5)
>>> array(['2022-05-11', '2022-05-12', '2022-05-13', '2022-05-14',
'2022-05-15'], dtype='datetime64[D]')
date_list = ['2022-01-04', '2022-01-07', '2022-05-11', '2022-06-10', '2022-07-03']
# pd.to_datetime : datetime64 타입으로 바꿔준다
pd.to_datetime(date_list)
>>> DatetimeIndex(['2022-01-04', '2022-01-07', '2022-05-11', '2022-06-10',
'2022-07-03'],
dtype='datetime64[ns]', freq=None)
df = pd.read_csv('../data/seoul.csv', encoding='cp949')
df['날짜'] # 문자열
>>> 0 1907-10-01
1 1907-10-02
2 1907-10-03
3 1907-10-04
4 1907-10-05
...
39921 2018-03-24
39922 2018-03-25
39923 2018-03-26
39924 2018-03-27
39925 2018-03-28
Name: 날짜, Length: 39926, dtype: object
df['날짜'] = pd.to_datetime(df['날짜'])
df['날짜']
>>> 0 1907-10-01
1 1907-10-02
2 1907-10-03
3 1907-10-04
4 1907-10-05
...
39921 2018-03-24
39922 2018-03-25
39923 2018-03-26
39924 2018-03-27
39925 2018-03-28
Name: 날짜, Length: 39926, dtype: datetime64[ns]
df['요일'] = df['날짜'].dt.strftime('%a')
df
위와 같이 .dt를 써서 기존에 알고 있던 datetime 함수들을 쓸 수 있다.
pandas.date_range()
# 시작날짜와 종료날짜를 셋팅하면, 알아서 날짜를 채워주는 함수
pd.date_range('2022-12-02', '2023-01-05')
>>> DatetimeIndex(['2022-12-02', '2022-12-03', '2022-12-04', '2022-12-05',
'2022-12-06', '2022-12-07', '2022-12-08', '2022-12-09',
'2022-12-10', '2022-12-11', '2022-12-12', '2022-12-13',
'2022-12-14', '2022-12-15', '2022-12-16', '2022-12-17',
'2022-12-18', '2022-12-19', '2022-12-20', '2022-12-21',
'2022-12-22', '2022-12-23', '2022-12-24', '2022-12-25',
'2022-12-26', '2022-12-27', '2022-12-28', '2022-12-29',
'2022-12-30', '2022-12-31', '2023-01-01', '2023-01-02',
'2023-01-03', '2023-01-04', '2023-01-05'],
dtype='datetime64[ns]', freq='D')
# 시간 단위로
pd.date_range('2022-11-30 09:00', '2023-02-05 11:00', freq='H')
>>> DatetimeIndex(['2022-12-02 09:00:00', '2022-12-02 10:00:00',
'2022-12-02 11:00:00', '2022-12-02 12:00:00',
'2022-12-02 13:00:00', '2022-12-02 14:00:00',
'2022-12-02 15:00:00', '2022-12-02 16:00:00',
'2022-12-02 17:00:00', '2022-12-02 18:00:00',
...
'2022-12-10 02:00:00', '2022-12-10 03:00:00',
'2022-12-10 04:00:00', '2022-12-10 05:00:00',
'2022-12-10 06:00:00', '2022-12-10 07:00:00',
'2022-12-10 08:00:00', '2022-12-10 09:00:00',
'2022-12-10 10:00:00', '2022-12-10 11:00:00'],
dtype='datetime64[ns]', length=195, freq='H')
# 평일만
pd.date_range('2022-11-30', '2023-02-05', freq='B')
>>> DatetimeIndex(['2022-11-30', '2022-12-01', '2022-12-02', '2022-12-05',
'2022-12-06', '2022-12-07', '2022-12-08', '2022-12-09',
'2022-12-12', '2022-12-13', '2022-12-14', '2022-12-15',
'2022-12-16', '2022-12-19', '2022-12-20', '2022-12-21',
'2022-12-22', '2022-12-23', '2022-12-26', '2022-12-27',
'2022-12-28', '2022-12-29', '2022-12-30', '2023-01-02',
'2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06',
'2023-01-09', '2023-01-10', '2023-01-11', '2023-01-12',
'2023-01-13', '2023-01-16', '2023-01-17', '2023-01-18',
'2023-01-19', '2023-01-20', '2023-01-23', '2023-01-24',
'2023-01-25', '2023-01-26', '2023-01-27', '2023-01-30',
'2023-01-31', '2023-02-01', '2023-02-02', '2023-02-03'],
dtype='datetime64[ns]', freq='B')
freq 에 대한 offset은 아래 표를 참고하도록 하자.
'Python > Pandas' 카테고리의 다른 글
Pandas - 날짜 단위로 그룹화하기 resample() (0) | 2023.01.08 |
---|---|
Pandas 데이터프레임에서 boolean indexing의 활용 (0) | 2022.12.01 |
Pandas 피벗 테이블(Pivot table) (0) | 2022.12.01 |
오픈API Goolglemaps Geocode로 위치정보 받아오기 (0) | 2022.12.01 |
Pandas의 DataFrame.plot() 으로 시각화하기 (0) | 2022.12.01 |