데이터 분석

[Pandas] 날짜 데이터 다루기 | 서울시 미세먼지 데이터 본문

Python/Pandas

[Pandas] 날짜 데이터 다루기 | 서울시 미세먼지 데이터

딱한아이 2024. 12. 18. 20:12

날짜 데이터 다루기

✔️ object 타입의 '(년-월-일:시)' 컬럼을 pandas에서 인식할 수 있는 datetime 형태로 변경해보자. 

 

우선 pandas에서 datetime으로 인식 할 수 있는 데이터 형태는 다양하다.

    ● 날짜만 포함된 형식 : YYYY-MM-DD | YYYY/MM/DD | MM/DD/YYYY

    ● 날짜와 시간 포함된 형식 : YYYY-MM-DD HH:MM:SS | YYYY/MM/DD HH:MM | YYYY-MM-DDTHH:MM:SS

제공 데이터에서 해당 컬럼의 형식이 '2021-05-15:15' 와 같이 되어있기 때문에 단계적으로 ' YYYY-MM-DD HH:MM:SS ' 형태로 가공하고자 한다.

 

# Step 1 

str 문자열 메소드를 활용해 ':'를 기준으로 문자열을 분리한다. 

df['(년-월-일:시)'].str.split(':')

 

# Step 2

분리된 시간 부분을 'HH:MM:SS' 형태로 가공한다.

이때 제공 데이터의 경우 0시가 24시로 표시되어있기 때문에 이를 반영한다.

df['(년-월-일:시)'].str.split(':').str[1].str.replace('24', '00') + ':00:00'

 

# Step 3

최종적으로 날짜 부분과 시간 부분을 원하는 형태로 합친 후에, object 타입을 datetime 타입으로 변환한다.

df['(년-월-일:시)'] = df['(년-월-일:시)'].str.split(':').str[0] + ' ' + df['(년-월-일:시)'].str.split(':').str[1].str.replace('24', '00') + ':00:00'
df['(년-월-일:시)'] = pd.to_datetime(df['(년-월-일:시)'], format='%Y-%m-%d %H:%M:%S')

df.head(16)


 

✔️ '(년-월-일:시)' 컬럼을 인덱스로 설정하고 데이터를 '주' 단위로 추출하여 연속형 변수들에 대해 최소, 최대, 평균, 표준편차를 구해보자. 

 

위 작업을 수행하기 위해 아래 내용을 숙지하고 있으면 쉽게 해결할 수 있다.

DataFrame.resample

 

pandas의 resample은 시간 데이터가 포함된 datetime 인덱스를 기준으로 데이터의 빈도를 변경하거나 집계 작업을 수행할 때 유용하다. 

    ● 시간 간격 조정 : 데이터를 지정한 빈도로 다시 샘플링 가능

    ● 집계 함수 적용 : mean, sum, count 등 집계 작업을 쉽게 적용

    ● 시간 데이터 : 시계열 데이터를 일별, 주별, 월별로 변환하거나 집계하는 데 적합

 

➡️ resample의 빈도(rule) 인수는 다양하다. 예를 들어:

    ● 'D' : 일별

    ● 'W' : 주별

    ● 'M' : 월별

    ● 'Q' : 분기별

    ● 'H' : 시간별

    ● 'T' 또는 'min' : 분 단위

    ● 'S' : 초 단위

    ● 'A' : 연도별

 

이제 이 정보를 갖고 적용해보자.

 

# 단위 집계

df.set_index('(년-월-일:시)').select_dtypes(exclude=['object']).resample('W').agg(['min', 'max', 'mean', 'std'])

 

# 단위 집계

df.set_index('(년-월-일:시)').select_dtypes(exclude=['object']).resample('M').agg(['min', 'max', 'mean', 'std'])

 

#  단위 집계

df.set_index('(년-월-일:시)').select_dtypes(exclude=['object']).resample('D').agg(['min', 'max', 'mean', 'std'])