Data_Analysis_Track_33/Python

Python_Pandas_01-3(결측치)

lsc99 2023. 9. 12. 21:30

결측치 (Missing Value, Not Available)
결측치 : 모르는 값, 수집이 안된값, 현재 가지고 있지 않은 값.
- 판다스에서 결측치
    None, numpy.nan, numpy.NAN
    결측치는 float 타입으로 처리된다.


결측치 확인 : 각 함수/메소드는 각 원소별로 결측치인지 확인해서 결과를 반환한다.
- Numpy
    np.isnan(배열)

import numpy as np
a = np.array([1,np.nan])
np.isnan(a)


- Series/DataFrame
    Series/DataFrame객체.isnull() 또는 isna()
    Series/DataFrame객체.notnull() 또는 notna()

 

import pandas as pd
import numpy as np

s = pd.Series([10, 20, 30, np.nan, 50, np.nan, 60])
print("원소개수:", s.size)
print("결측치를 뺀 원소개수:", s.count())

isnull()로 True가 나오는 값들은 결측치가 된다.

s.isnull() # 원소별로 결측치인지 체크(결측치: True)
# s.isna()

notnull()로 False가 나오는 값들은 결측치가 된다.

s.notnull() # 결측치 : False, 유효값: True
# s.notna()

결측치 개수 구하기

# 결측치의 개수
s.isnull().sum() # bool값들을 더할 경우 : True - 1, False - 0 으로 변환후 계산 -> True가 몇개인지 출력한다.

결측치 비율 구하기

# 결측치의 비울
s.isnull().mean()

결측치 처리
- 제거
    dropna()


- 다른값으로 대체
    fillna()
    평균, 중앙값, 최빈값을 주로 사용

 

s2 = s.copy()
s2 # 결측치는 float 타입이기 때문에 정수와 함께 float 타입으로 생성된다.

dropna() -> 결측치 제거

s2.dropna() # s2에서 결측치를 제거한 결과를 새로운 series에 담아서 반환. -> 원본이 바뀌지 않는다.

dropna(inplace=True) -> 결측치 제거, 원본 변경

s2.dropna(inplace=True) # 원본 변경

fillna() -> 결측치 값 대체

s.fillna(10000)  # 결측치 값들을 새로운 값으로 채운다.
# 결측치를 대체 : 가장 가능성이 높은 값으로 채움 -> 수치 : 평균, 중앙값, 범주 : 최빈값

결측치 제거하고 평균

m = s.mean() # 결측치를 제거하고 계산.
m

평균으로 결측치 채우기

s.fillna(m)