| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 프로그래머스
- Datarian
- LEFTJOIN
- rank
- MYSQL
- 독서
- funnel
- Retention
- 퍼널분석
- 데이터리안
- 신입 데이터분석가
- pandas
- 데이터분석
- 순위함수
- 그로스해킹
- 취준
- 누적합
- dense_rank
- 린분석
- SolveSQL
- 윈도우함수
- leetcode
- SQL
- advent of sql
- 윈도우 함수
- 서브쿼리
- regexp
- python
- row_number
- 리텐션
- Today
- Total
데이터 분석
[Pandas] 날짜 데이터 다루기 | 서울시 미세먼지 데이터 본문
날짜 데이터 다루기
✔️ 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'])

'Python > Pandas' 카테고리의 다른 글
| [Pandas] 주소 데이터 정제하기 | str.split() (0) | 2025.02.13 |
|---|---|
| [Pandas] DataFrame.pivot() / pivot_table() (1) | 2024.12.19 |
| [Pandas] 날짜 데이터 다루기 (2) | 2024.12.17 |
| [Pandas] datetime 컬럼 가공 | 잘못된 연도 값 조정하기 (2) | 2024.12.14 |
| [Pandas] Series.map() & DataFrame.apply() 활용 (0) | 2024.12.13 |