Pandas에서는 datetime64 라는 일자와 시간을 표기하는 타입을 지원합니다. 문자열로 되어있는 일자 (연월일)나 시간 (시분초)를 to_datetime이라는 함수로 datetime64 타입으로 변환할 수 있습니다.
datetime64
먼저 예제를 하나 생성해 보겠습니다.
df = pd.DataFrame({'Birth':['2019-01-01 09:10:00',
'2019-01-08 09:20:30',
'2019-02-01 10:20:00',
'2019-02-02 11:40:50',
'2019-02-28 15:10:20',
'2019-04-10 19:20:50',
'2019-06-30 21:20:50',
'2019-07-20 23:30:59']})
df.dtypes를 통해 Birth column은 문자열임을 알 수 있습니다. to_datetime을 통해 Birth column을 datetime64 타입으로 바꿀 수 있습니다.
df['Birth'] = pd.to_datetime(df['Birth'], format='%Y-%m-%d %H:%M:%S', errors='raise')
df.dtypes를 통해 Birth column이 datetime64로 바꿔졌음을 알 수 있습니다.
to_datetime 함수의 format 파라미터에서 사용하는 대표적인 포맷을 다음과 같습니다.
datetime64 타입으로 변환했을 시 매우 간단하게 연,월,일,시,분,초 등의 시간 속성을 쉽게 얻을 수 있습니다.
df['Birth_date'] = df['Birth'].dt.date # YYYY-MM-DD(문자)
df['Birth_year'] = df['Birth'].dt.year # 연(4자리숫자)
df['Birth_month'] = df['Birth'].dt.month # 월(숫자)
df['Birth_month_name'] = df['Birth'].dt.month_name() # 월(문자)
df['Birth_day'] = df['Birth'].dt.day # 일(숫자)
df['Birth_time'] = df['Birth'].dt.time # HH:MM:SS(문자)
df['Birth_hour'] = df['Birth'].dt.hour # 시(숫자)
df['Birth_minute'] = df['Birth'].dt.minute # 분(숫자)
df['Birth_second'] = df['Birth'].dt.second # 초(숫자)
이 뿐만 아니라 분기, 요일, 연기준 몇 일, 몇 번째 주인지도 알 수 있습니다.
df['Birth_quarter'] = df['Birth'].dt.quarter # 분기(숫자)
df['Birth_weekday'] = df['Birth'].dt.weekday # 요일숫자(0-월, 1-화) (=dayofweek)
df['Birth_weekofyear'] = df['Birth'].dt.weekofyear # 연 기준 몇주째(숫자) (=week)
df['Birth_dayofyear'] = df['Birth'].dt.dayofyear # 연 기준 몇일째(숫자)
df['Birth_days_in_month'] = df['Birth'].dt.days_in_month # 월 일수(숫자) (=daysinmonth)
From datetime to string
datetime64 타입의 .dt 속성에서 strftime을 통해 datetime64에서 string으로 타입을 다시 바꿀 수 있습니다. strftime 함수 안에 파라미터를 통해 스트링의 포맷을 지정할 수 있습니다.
df['Birth'] = df['Birth'].dt.strftime('%d/%m/%Y')
문자열로 변환 시 위의 포맷처럼 다양한 조건으로 변환할 수 있는데 두자리 연도는 %y, 일요일은 '0'부터 시작하는 주 단위의 요일은 %w, 해당 주의 숫자 (week number of the year) 는 %U (일요일이 주의 첫 번째)나 %W (월요일이 주의 첫 번째) 등으로 바꿀 수 있습니다.
From string to datetime
위의 소개한 pandas의 to_datetime 이외에도 datetime 모듈의 strptime을 이용해서 스트링 객체를 datetime 객체로 변환할 수 있습니다.
참조
'Computer > Pandas' 카테고리의 다른 글
Onehot 인코딩의 역변환 (inverse transform) (0) | 2021.07.25 |
---|---|
Pandas Multiple Columns Label Encoding (1) | 2021.07.14 |
Pandas DataFrame 합치기 - merge, concat (0) | 2021.03.31 |
Pandas 에서 데이터 이상치 찾기 - Z-score, Modified Z-score, IQR (0) | 2021.03.31 |
Pandas - get_dummies 함수 (0) | 2021.03.25 |