본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python 결측치 확인(isnan, isnull), 수정(fillna), 삭제(dropna)

728x90
반응형

결측치

  - 잘못 입력되거나 연산된 값을 표현

  - numpy에서 nan으로 표현

 

 

 

1. 확인

 

1) np.isnan

 

이런 데이터가 있다고 하자.

 

 

s1에 isnan 함수를 사용하면 에러가 난다.

 

s2에 isnan 함수를 사용하면 출력이 잘 된다.

 

 

이렇게 되는 이유는 isnan은 문자형 NA는 체크를 하지 못하며 숫자형 NA에 대해서만 체크가 가능하다.

참고로 NA는 Series 에서 실수 타입이지만 문자형과 같이 쓰이면 문자가 된다.

 

 

 

2) pd.isnull / isnull 메서드

 

pd.isnull은 문자형 NA에 대해서도 체크가 가능하다.

 

상수 하나에 대해서 NA를 체크하려면 pd.isnull()함수를 사용하여야 한다.

 

NA.isnull은 에러가 난다.

 

 

데이터 프레임에 대해서 각 원소별 NA 값을 확인할 수 있다.

 

 

뒤에 sum을 붙이면 각 컬럼별 NA의 수를 확인 할 수 있다.

 

 

 

info 메서드를 활용하면 데이터프레임의 요약 정보를 알 수 있는데, non-null로 null의 개수를 파악하는 방법도 있다.

즉 데이터프레임의 요약 정보를 제공하는데 각 컬럼별 not null값의 수를 출력해준다.

 

 

 

 

2. 수정

다양한 방법이 있다.

 

1) 직접 수정

 

이렇게 직접 수정하는 방법이 있다.

 

 

 

2) 조건 수정

 

 

 

 

3) NA 치환 메서드 ** 가장 많이 사용하는 방법이다.

fillna 메서드를 이용하면 간단하게 치환된다.

 

 

 

 

 

3. 삭제

emp.dropna(axis = 0,            # 제거방향(0: 행 제거, 1: 컬럼 제거)

                    how = 'any',        # NA 제거 방식    ↔ all

                    thresh,                # NA 수 제한

                    subset)               # NA 체크할 대상 전달

 

 

예를 들어 설명해보겠다.

 

emp에서 COMM값이 NA가 아닌 값들만 추출(NA 인 행 제거)

 

~ 가 파이썬에서는 부정연산자이다. R에서는 !을 썼었다.

 

다른 문제를 풀어보자

 

예) emp에서 COMM 값이 NA인 행을 제거 후 SAL 평균을 출력하여라.

 

 

금방 배운 dropna 메서드를 사용하여보자.

 

이렇게 사용하면 NA가 있는 모든 행을 제거해버린다.

 

emp에서 특정 컬럼만 NA를 체크하고자 한다면,

 

이렇게 하면 된다.

 

SAL의 평균을 구해야 하므로, 

이렇게 사용하면 된다.

 

 

subset이 없으면 NA가 있는 모든 행을 제거하므로 꼭 COMM에만 NA 체크를 하고 싶다면 subset 옵션을 사용하도록 하자.

 

 

728x90
반응형