[판다스] 결측치

밍키·2020년 8월 12일
0

판다 판다 판다스

목록 보기
3/12

1. 결측치 (Missing Value, Not Available)


  • 판다스에서 결측치
    • None
    • numpy.nan
    • numpy.NAN

1.1 결측치 확인


  • Numpy
    • np.isnan(배열)
import numpy as np
a = np.array([1,np.nan])
np.isnan(a)
  • Pandas
    • Series
      • Series객체.isnull()
      • Series.notnull()
    • DataFrame
      • DataFrame객체.isnull(), DataFrame객체.isna()
      • DataFrame객체.notnull(), DataFrame객체.notna()

1.1.1 TODO


# 문자열을 상관없는데 결측치가 들어가게되면 정수형태가 float타입으로 변경된다.
# 정수형으로 변경 불가능.
# 정수형 데이터가 파일로 읽어왔더니 실수로 변했다면 결측치가 안에 있을 확률이 높다.

# 전체 원소 수
s1.shape, s1.size

# 결측치를 뺀, 제외한 원소 개수
s1.count()

# 결측치 체크하기
s1.isnull() # 결측치 True로 반환
s1.notnull() # 결측치가 False로 반환.

# 결측치 몇 개인지 확인
# True는 1로, False는 0으로 처리
s1.isnull().sum()

1.2 결측치 처리


  • 제거
    • dropna()
  • 다른값으로 대체
    • fillna()

1.2.1 TODO

# 결측치를 어떤 값으로 처리해 줄지가 관건.

# 결측치 제거하기
s2.dropna()
# 출력된다면? 원본이 안 바뀜!!, inplace 확인하는 법도 있음!
s2.dropna(inplace=True) # 출력되지 않음.
s2 # 원본 바뀜.

# 시리즈에서는 결측치만 지울 수 있지만
# 데이터 프레임에서는 행이나 열을 제거함.

# 결측치를 특정한 값으로 대체
s1.fillna(8008)
# 보통 평균이나 중앙값 넣어줌.

# 결측치 평균 값으로 대체하기.
mean_value = np.round(s1.mean())
s4 = s1.fillna(mean_value)
s4
# 숫자에서는 보통 평균이나 중앙값으로 대체

# 범주형 값에서 결측치
s5 = pd.Series(['A','A','AB','O',None, 'B'])
# 최빈값
s5.mode()
# mode에서 mode(dropna=False)를 주면, 결측치도 포함해서 최빈값을 보여준다.
# 이럴 땐 최빈값으로 대체한다.
s5.fillna(s5.mode()[0])

# 만약 연속된 값이라면?
# 결측치 앞에 있는 값으로 채운다
s5.fillna(method='ffill') # 포워드 필
# 결측치 뒤에 있는 값으로 채운다.
s5.fillna(method='bfill') # 백워드 필
profile
대한민국 4차 산업의 역군을 꿈꾸며.

0개의 댓글