데이터 분석

[Pandas] datetime 컬럼 가공 | 잘못된 연도 값 조정하기 본문

Python/Pandas

[Pandas] datetime 컬럼 가공 | 잘못된 연도 값 조정하기

딱한아이 2024. 12. 14. 17:53
문제

 

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 나노초 조정