데이터프레임을 다루다보면
여러 아웃라이어들을 볼 수 있다.
이 값들은 가치가 있을 수 있지만
때로는 제외하고 처리해야할 때가 많다.
데이터 불러오기
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까지 제한되어 바뀌었다.
나머지는 그대로 유지되었다.
다음 포스팅에선 특잇값을
컬럼별 평균값으로 대체하는 방법을 이어서 설명!
'Pandas > 전처리' 카테고리의 다른 글
판다스 - 원핫인코딩 (One-Hot Encoding) (0) | 2020.06.28 |
---|---|
판다스 - 특잇값(outlier) 처리하기2 (0) | 2020.06.27 |
판다스 - 넓은 데이터 정리하기 : melt (0) | 2020.06.20 |
판다스 - isin() (0) | 2020.06.19 |
판다스 - 컬럼(열) 분리, 컬럼(열) 추가 : str.split, str.get (0) | 2020.06.19 |