지콩이
기발자의 기록
지콩이
전체 방문자
오늘
어제
  • 분류 전체보기 (41)
    • 대학원 공부 (29)
      • 데이터베이스 (8)
      • 기계학습의원리 (11)
      • 텐서플로 (4)
      • 통계 (3)
      • anomaly detection (2)
      • Python 데이터분석 (1)
    • 인공지능프로젝트 (3)
    • 알면 도움 되는 꾸루팁 (8)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 이상징후탐지
  • 파이썬
  • 딥러닝
  • 베이지안
  • 텐서플로우
  • 데이터셋
  • 머신러닝
  • 변수변환
  • 슈도코드
  • anomaly detection
  • 판다스
  • vscode
  • feature
  • 빈자리접수
  • 주성분분석
  • 기계학습
  • 텐서플로
  • 볼츠만머신
  • 강화학습
  • RBM
  • 가상환경
  • 데이터전처리
  • pandas
  • 데이터분석
  • 파이썬에러
  • 전이학습
  • 빅데이터
  • EM알고리즘
  • 정처기
  • 신용카드사기거래

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
지콩이

기발자의 기록

[데이터 전처리] Python 데이터 프레임 결측 값 처리(NaN, Null, None, NoT)- isna(), dropna()
대학원 공부/Python 데이터분석

[데이터 전처리] Python 데이터 프레임 결측 값 처리(NaN, Null, None, NoT)- isna(), dropna()

2024. 4. 29. 22:29

코테 준비하다가 까먹을까봐 정리하는 글!

 

파이썬에서 None, np.NaN, pd.NaT은 결측값을 의미한다. 

이러한 결측 값을 확인하고 전처리하는 방법을 정리하고자 한다.

 

아래처럼 필요한 라이브러리를 호출해주고, 데이터프레임을 만든다.

import pandas as pd

students=pd.DataFrame({'이름':['장화','홍련','콩쥐','팥쥐','해님','달님'],
                        '국어':[70,85,None,100, None, 85],
                        '수학':[65,100,80, 95, None,70]})

 

결측치가 있는 데이터가 준비되었다.

🔍결측치 탐색

isna() 또는 notna()

isna()는 값이 결측치일 경우, True를 반환

notna()는 결측치가 아닐 경우, True를 반환

 

(참고로 isna()와 isnull()은 기능이 같은 함수이다.)

students.isna()

결측치를 True로 반환한 모습을 확인할 수 있다.

하지만 데이터가 대용량일 경우, 이러한 방식은 큰 효용이 없다.

따라서 sum()함수를 활용하여 결측치 개수를 확인한다.

students.isna().sum() #열별 결측치 개수
students.isna().sum(1) #행별 결측치 개수

첫 번째 줄 실행 결과
두 번째 줄 실행 결과

🔍결측치 제거

결측치 개수가 적다면, 제거하는 방법도 하나의 전처리 기법이다.

dropna()함수로 결측치가 존재하는 행 또는 열을 삭제할 수 있다.

dropna()함수의 매개변수는 다음과 같다.

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
  • axis : 0 또는 'index'이면 결측값이 포함된 행을 삭제하고, 1 또는 'columns'이면 결측값이 포함된 열을 삭제
  • how : 'any'이면 결측값이 존재하는 모든 행/열 삭제, 'all'이면 모든 값이 결측값일 때 삭제
  • thresh : 정수값을 지정하면 행 또는 열에서 결측값이 아닌 값이 그보다 많을 때 행 또는 열을 유지
  • subset : 어떤 레이블에 결측값이 존재하면 삭제할지 정의
  • inplace : True이면 제자리에서 작업을 수행하고 None을 반환=>원본데이터를 직접 변형하는 명령어(주의해야함)

'수학' 컬럼의 결측값이 있는 행만 제거하는 코드

students.dropna(subset='수학')

 

행에서 결측값이 아닌 데이터 개수가 2개이상인 데이터만 추출하는 코드

students.dropna(thresh=2)

🔍결측치 대체

결측치를 제거하는 방법 외에, 대체하는 방법도 있다.

fillna()함수를 이용한다.

함수의 매개변수는 다음과 같다.

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None)
  • value :  단일 값 혹은 dict/Series/DataFrame 형식으로 대체할 값을 직접 입력
  • method : 'pad', 'ffill'은 이전 값으로 채움, 'backfill', 'bfill'은 다음에 오는 값으로 채움
  • axis : 0 또는 'index'이면 행 방향으로 채우고 1 또는 'columns'이면 열 방향으로 채움
  • limit : method 인자를 지정한 경우, limit으로 지정한 개수만큼만 대체할 수 있음
health=pd.DataFrame({'연도':[2017, 2018, 2019, 2020, 2021, 2022],
                     '키':[160, 162, 165, None, None, 166],
                     '몸무게':[53, 52, None, 50, 51, 54],
                     '시력': [1.2, None, 1.2, 1.2, 1.1, 0.8],
                     '병결': [None, None, None, 2, None, 1]})
health

결측값을 각 열의 평균값을 채우는 코드

health.fillna(health.mean())

결측값을 바로 직전의 값으로 채우는 코드

health.fillna(method='pad')

    지콩이
    지콩이
    기획자와 개발자 그 사이 어딘가

    티스토리툴바