| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- row_number
- funnel
- MYSQL
- 취준
- 리텐션
- pandas
- 퍼널분석
- 신입 데이터분석가
- rank
- 누적합
- regexp
- LEFTJOIN
- 데이터리안
- 프로그래머스
- 데이터분석
- 그로스해킹
- 윈도우 함수
- python
- Retention
- Datarian
- advent of sql
- 독서
- dense_rank
- 윈도우함수
- 순위함수
- 린분석
- leetcode
- 서브쿼리
- SQL
- SolveSQL
- Today
- Total
데이터 분석
[Pandas] datetime 컬럼 가공 | 잘못된 연도 값 조정하기 본문
문제
Yr_Mo_Dy에 년도가 2061년 이상의 경우에는 모두 잘못된 데이터이다. 해당경우의 값은 100을 빼서 새롭게 날짜를 Yr_Mo_Dy 컬럼에 정의하자.
해결방법 1
df['Yr_Mo_Dy_1'] = df['Yr_Mo_Dy'].apply(lambda x : x.replace(year = x.year - 100) if x.year >= 2061 else x)
✅ Series.apply( ) : 각 날짜를 개별적으로 처리하기 위함
✅ x.replace( ) : datetime 객체를 다루는 방식 중 하나로, 날짜에서 특정 구성 요소(예: 연도, 월, 일 ... )를 변경하는 데 사용
☞ datetime.replace( ) 메소드는 날짜/시간 객체의 일부 속성을 새로운 값으로 대체하는 기능을 제공
● year 요소 외에도 month, day, hour, minute, second, mircosecond 등 지정 가능하다.
✅ 주의사항
☞ Series에 apply를 사용한 경우 각 값이 이미 datetmie 객체이므로 x.year로 연도에 바로 접근할 수 있다.
● 이 경우에 x.dt.year로 접근할 수 없음을 인지하자.
해결방법 2
import numpy as np
df['Yr_Mo_Dy_2'] = np.where(df['Yr_Mo_Dy'].dt.year >= 2061,
df['Yr_Mo_Dy'] - pd.DateOffset(years=100),
df['Yr_Mo_Dy'])
✅ np.where( ) : Numpy 라이브러리 함수로, 조건에 따라 값을 선택해거나 배열을 처리할 때 사용
import numpy as np
result = np.where(condition, value_if_true, value_if_false)
● condition : 조건을 나타내는 배열이나 논리식
● value_if_true : 조건이 참일 경우 반환되는 값
● value_if_false : 조건이 거짓일 경우 반화되는 값
✅ pd.DateOffset( ) : 날짜/시간 데이터를 다룰 때, 특정 기간을 더하거나 빼는 데 사용하는 클래스
● 날짜 데이터에 특정 기간(연도, 월, 일 등)을 더하거나 뺄 때 사용한다.
● 시간 차이가 일정하지 않은 경우데도 정확히 처리 가능하다.
☞ 월 조정 :
date = pd.Timestamp('2024-12-14')
new_date = date + pd.DateOffset(months=2) # 2개월 추가
print(new_date) # 2025-02-14
☞ 음수 값 사용 :
date = pd.Timestamp('2024-12-14')
new_date = date - pd.DateOffset(years=1, months=3) # 1년 3개월 빼기
print(new_date) # 2023-09-14
☞ 다양한 단위 :
| 매개변수 | 설명 |
| years | 연도 조정 |
| months | 월 조정 |
| weeks | 주 조정 |
| days | 일 조정 |
| hours | 시간 조정 |
| minutes | 분 조정 |
| seconds | 초 조정 |
| micoseconds | 마이크로초 조정 |
| nanoseconds | 나노초 조정 |
'Python > Pandas' 카테고리의 다른 글
| [Pandas] 날짜 데이터 다루기 | 서울시 미세먼지 데이터 (2) | 2024.12.18 |
|---|---|
| [Pandas] 날짜 데이터 다루기 (2) | 2024.12.17 |
| [Pandas] Series.map() & DataFrame.apply() 활용 (0) | 2024.12.13 |
| [Pandas] DataFrame.unstack()/div() 활용 (1) | 2024.12.10 |
| [Pandas] Filtering & Sorting (1) | 2024.12.07 |