본문 바로가기

Pandas/전처리

판다스 - 특잇값(outlier) 처리하기

반응형
데이터프레임을 다루다보면

여러 아웃라이어들을 볼 수 있다.

이 값들은 가치가 있을 수 있지만

때로는 제외하고 처리해야할 때가 많다.

 

 

 

데이터 불러오기

 

data = pd.DataFrame(np.random.randn(1000, 4))

요약본을 살펴보자

 

각 컬럼별 평균값은 굉장히 작은데

 

최솟값과 최대값의 절대값이 3이 넘는 데이터가 있다.

 

이를 보통 특잇값이라고 부르며

 

적절한 값으로 대체할 필요가 있다.

 

 

 

 

 

처리전, 특잇값이 있는 행 살펴보기

 

절댓값이 3을 초과하는 값이 들어있는 모든 로우를 살펴보자

 

이때 쓰는 것이 any 메서드이다.

 

한 행에 절댓값이 3이 넘는 데이터가 하나라도 있다면 

 

True를 반환한다.

 

0번, 2번행에 3이 넘는 데이터가 있다는 뜻이다.

 

 

 

True는 1이니 이를 더하면

 

 

총 6개의 행에 아웃라이어가 있다고 볼 수 있다.

 

 

불린 인덱싱

 

 

 

 

 

 

 

처리1. 지정 값으로 대체하기

(절댓값 3이 최소/최대)

 

 

절댓값이 3이 넘는 조건을 전체 데이터프레임에 넣었고

 

이를 다시 한번 원본 데이터프레임에 필터 조건으로 넣으면

 

True인 데이터만 필터링 되어 나온다.

 

 

저 아웃라이어들을 

 

음수라면 -3을 / 양수라면 +3으로 바꿔보자

 

그럴때 이용하는 것이 np.sign 이다.

 

 

data 값이 양수라면 1을 반환하고

음수라면 -1을 반환하게 된다.

 

이 데이터프레임에 3을 곱하면

 

값만 3, -3들로 바뀌게 된다.

 

 

 

 

이제 이 sign을 아까 True였던 값들과 바꿔보자

 

 

어떻게 된걸까?

 

 

 

아웃라이어 었던 데이터들이 

(True)

 

양수라면 최대 3, 음수라면 최소 -3까지 제한되어 바뀌었다.

 

나머지는 그대로 유지되었다.

 

 

 

 

 

 

 

 

다음 포스팅에선 특잇값을

 

컬럼별 평균값으로 대체하는 방법을 이어서 설명!

 

 

반응형