Hey Tech
[Python] 결측치(NaN) 확인 및 제거 방법 본문
본 포스팅에서는 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.2. pandas.Series.isnull().sum()
pandas.Series.isnull().sum()는 칼럼별 결측치 개수를 모두 카운팅 하여 제공합니다.
dataset_raw.isnull().sum()
그림 2를 통해 review 칼럼에 2개의 결측치가 있는 것을 확인할 수 있습니다.
2. 결측치 제거
dropna 메서드를 활용하여 결측치를 제거할 수 있습니다. 결측치를 포함하는 행을 삭제할 것인지, 칼럼을 삭제할 것인지에 따라 방법이 2가지로 나뉩니다.
- 결측치 포함 행 제거: axis = 0
- 결측치 포함 칼럼 제거: axis = 1
각각 알아봅니다.
2.1. 결측치 포함 행 제거
dataset = dataset_raw.dropna(axis = 0)
dataset.isnull().sum()
아래의 그림 3처럼, 결측치를 포함하는 행 2개가 제거된 것을 알 수 있습니다.
2.2. 결측치 포함 칼럼 제거
dataset = dataset_raw.dropna(axis = 1)
dataset.isnull().sum()
아래 그림 4처럼, 결측치가 포함된 review 칼럼 전체가 삭제된 것을 확인할 수 있습니다.
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 변수에는 어떤 값도 할당되지 않는 것을 알 수 있습니다.
포스팅 내용에 오류가 있다면 아래에 댓글 남겨주시면 감사드리겠습니다.
그럼 오늘도 즐겁고 행복한 하루 보내시길 바랍니다 :)
고맙습니다😊
'AI & 빅데이터 > 데이터 분석(Python)' 카테고리의 다른 글
[Python] pandas 데이터프레임 문자열 바꾸기(replace, str.replace 함수) (0) | 2022.08.09 |
---|---|
[Python] 현재 날짜, 시간 구하기(연, 월, 일, 시, 분, 초) (0) | 2022.06.23 |
[Python] 'Unnamed: 0" 없이 엑셀 파일 읽어오기 (0) | 2022.02.06 |
[Python] 데이터프레임의 특정 칼럼 위치 바꾸기 (0) | 2022.02.05 |
[Python] map, lambda 함수를 활용한 데이터 핸들링 방법 및 이점 (0) | 2022.02.04 |