Hey Tech

[Python] 결측치(NaN) 확인 및 제거 방법 본문

AI & 빅데이터/데이터 분석(Python)

[Python] 결측치(NaN) 확인 및 제거 방법

Tony Park (토니) 2022. 6. 1. 16:15
728x90
반응형

본 포스팅에서는 Python pandas 패키지를 활용하여 결측치를 확인하고 제거하는 방법에 대해 다룹니다.

👨‍💻 들어가며

기본적으로 pandas 설치 및 import는 되어 있고 원하는 데이터셋도 불러왔다고 가정합니다.

pandas 패키지 설치

!pip install pandas
!pip install openpyxl # excel 파일 불러오기 위함
# pipenv 가상환경용
# !pipenv install pandas 
# !pipenv install openpyxl

pandas 패키지 import

import pandas as pd

데이터셋 Load

dataset_raw = pd.read_excel("./data/dataset_raw.xlsx")

1.  결측치 확인

결측치 개수를 확인하는 방법은 크게 2가지입니다. 각각 알아봅니다.

  • pandas.Series.info()
  • pandas.Series.isnull().sum()

1.1. pandas.Series.info()

dataset_raw.info()

pandas.Series.info()는 데이터프레임의 전체 데이터 개수, 칼럼별 데이터 개수 및 타입 정보를 제공합니다. 특히, non-null인 데이터 개수를 칼럼별로 제공하기 때문에 대략적으로 각 칼럼별 결측치 개수를 한눈에 파악할 수 있다는 장점이 있습니다(그림 1).

그림 1. pandas.Series.info() 실행 예제

1.2. pandas.Series.isnull().sum()

pandas.Series.isnull().sum()는 칼럼별 결측치 개수를 모두 카운팅 하여 제공합니다.

dataset_raw.isnull().sum()

그림 2를 통해 review 칼럼에 2개의 결측치가 있는 것을 확인할 수 있습니다.

그림 2. pandas.Series.isnull().sum() 실행 예제

2.  결측치 제거

dropna 메서드를 활용하여 결측치를 제거할 수 있습니다. 결측치를 포함하는 행을 삭제할 것인지, 칼럼을 삭제할 것인지에 따라 방법이 2가지로 나뉩니다.

  • 결측치 포함 행 제거: axis = 0
  • 결측치 포함 칼럼 제거: axis = 1

각각 알아봅니다.

2.1.  결측치 포함 행 제거

dataset = dataset_raw.dropna(axis = 0)
dataset.isnull().sum()

아래의 그림 3처럼, 결측치를 포함하는 행 2개가 제거된 것을 알 수 있습니다.

그림 3. 결측치 포함 행 제거 결과

2.2.  결측치 포함 칼럼 제거

dataset = dataset_raw.dropna(axis = 1)
dataset.isnull().sum()

아래 그림 4처럼, 결측치가 포함된 review 칼럼 전체가 삭제된 것을 확인할 수 있습니다.

그림 4. 결측치 포함 칼럼 제거 결과

2.3. 기타 옵션

axis 외에도 how, thresh, subset, inplace 옵션이 있습니다. 각각 알아봅니다.

1) how 옵션(default = 'any')

  • how = 'any': 적어도 1개의 결측치가 있다면 해당 칼럼 또는 행을 제거
  • how = 'all': 칼럼 또는 행에 모든 데이터가 결측치일 경우에만 결측치 제거

2) thresh 옵션(int)

thresh 옵션은 결측치가 최소 몇 개일 때 결측치를 제거할지 결정하는 옵션입니다. 즉, 100을 입력했다면 100개의 결측치가 있을 때만 결측치를 제거합니다.

3) subset 옵션(칼럼 또는 인덱스 이름)

결측치를 찾아 제거할 칼럼 또는 인덱스 이름을 입력받아 해당되는 결측치만 제거할 수 있습니다.

4) inplace(bool, default = 'False')

결측치를 제거한 결과를 반환할지 말지 결정합니다. 즉, inplace = True일 경우 결측치 제거 결괏값을 반환하지 않습니다. 아래 그림 5. 6과 같이, 결측치 제거 결과를 dataset 변수에 할당하려 했으나 inpace가 True이므로 dataset 변수에는 어떤 값도 할당되지 않는 것을 알 수 있습니다.

 

그림 5. inplace가 True인 경우 실행예제1
그림 6. inplace가 True인 경우 실행예제2


포스팅 내용에 오류가 있다면 아래에 댓글 남겨주시면 감사드리겠습니다.

그럼 오늘도 즐겁고 행복한 하루 보내시길 바랍니다 :)

고맙습니다😊

728x90
반응형