본문 바로가기

Data Science/Pandas

Pandas로 datetime 다루기

728x90

이번 포스팅은 시계열 데이터나 시간을 속성으로 가지는 데이터를 다루기 위해 pandas에서 제공하는 datetime 모듈을 사용하여 데이터를 다루어 보도록 하겠습니다.

 

String을 datetime으로 

먼저, string으로 되어 있는 데이터 타입을 datetime 데이터 타입으로 여러 가지 방법으로 변환해 보겠습니다.

 

기본 방법



 

dayfirst = True 인자

to_datetime 함수에 dayfirst = True 를 넣으면, day(일)가 month(월)보다 앞으로 나와서 date 형으로 변환됩니다.



 

Custom format으로 변환하기

string형으로 되어 있는 데이터를 datetime 형으로 바꿀 때, string 형 데이터의 날짜 순서가 뒤죽박죽 섞여 있거나 다른 형식으로 되어 있을 때, format 인자에 적절하게 값을 매핑해 주어야 합니다.

아래 예시는 Year-Day-Month Hour:Minute:Second 로 되어 있는 string 형 데이터를 datetime 형으로 변환하는 예시입니다.



 

Error 데이터 다루기

아래와 같이 데이터에 error를 유발할 데이터가 있을 때, errors = 'ignore'을 하면 무시한 채로 datetime 형으로 변환이 되고, errors = 'coerce'로 하면 에러 데이터를 NaT 형으로 변환해 줍니다.



 

datetime 모듈의 strptime 사용하기


 

datetime 모듈의 strftime

strftime은 datetime으로 변환해주는 함수는 아니지만 strptime과 반대의 역할을 합니다.

strptime은 string을 datetime으로 변환해준다면, strftime은 datetime을 string 형으로 변환해 줍니다.

 



datetime 형식에 있는 속성을 이용하기

datetime 형식의 dt.year, dt.month, dt.day, dt.week, dt.dayofweek, dt.is_leap_year 등의 속성을 활용하여 년, 월, 일, 주 등의 데이터에 접근할 수 있습니다.


 


여러 개 컬럼들로부터 datetime 만들기

to_datetime 사용

아래와 같이 year, month, day로 속성 이름이 지정되어 있을 때, datetime으로 변환하면 자동으로 년, 월, 일 데이터를 찾아서 date 형식으로 변환해 줍니다.

 


 

만약 아래와 같이 다른 데이터도 포함되어 있으면 year, month, day에 해당하는 속성만 선택하여 바꾸어야 합니다.


 


 

parse_dates 속성 사용

아래와 같이, pd.read_csv 함수의 parse_dates 인수에 열 이름을 리스트 형식으로 넣으면 자동으로 datetime 형식으로 변환해 줍니다. 이를 활용해 read_csv 함수에서 여러 개의 컬럼을 datetime으로 변환해 보겠습니다.

 


 


 


datetime 형 column을 index로

datetime형 column을 index로 활용하면 데이터 쿼리 시 빠르고 간단하게 수행할 수 있습니다.


 

위와 같이 df의 index를 datetime 형 컬럼 데이터로 변환해 주면 아래와 같이 년도로 데이터를 뽑아낼 수 있습니다.

아래는 2023년 데이터만 뽑아낸 결과입니다.

 


이를 활용하면 아래처럼 년도 별로 groupby 집계 함수를 편리하게 사용할 수 있습니다.


 

아래와 같이, 년-월로도 데이터를 뽑아낼 수 있습니다. (년-월-일 도 가능)

하지만 'Month(월)' 혹은 'Day(일)' 등, 년도를 제외한 다른 단독 값으로 데이터를 뽑아내는 것을 불가능합니다.


 

 

 

 

참고자료

https://github.com/BindiChen/machine-learning/blob/main/data-analysis/008-pandas-datetime/pandas-datetime.ipynb

728x90
반응형