5. Handling Missing Data(결측치 다루기)
In [1]:
from IPython.core.display import display, HTML
display(HTML("<style> .container{width:90% !important;}</style>"))

Handling Missing Data

In [2]:
import pandas as pd
import numpy as np
In [3]:
# 임의의 데이터프레임 생성
df = pd.DataFrame( [ [np.nan, 2, np.nan, 0], 
                     [3, 4, np.nan, 1],
                     [np.nan, np.nan, np.nan, 5] ],
                                 columns = list('ABCD') )
df
Out[3]:
A B C D
0 NaN 2.0 NaN 0
1 3.0 4.0 NaN 1
2 NaN NaN NaN 5

dropna(axis = ?, how = ?, inplace = ?) : 결측치 버리기

  • axis = 0 (default) : 행 버리기 ⟷ axis = 1 : 컬럼 버리기
  • how = 'any' (default) : 행 또는 열의 NaN이 하나라도 있을 때 버리기 ⟷ how = 'all' : 전체 행 또는 열의 값이 NaN일 때 버리기
  • inplace = False (default) : drop한 결과 조회만 하기 ⟷ inplace = True : drop한 결과 데이터프레임에 바로 저장
In [4]:
# 전부다 Null인 컬럼 drop
df.dropna(axis=1, how= 'all') 
Out[4]:
A B D
0 NaN 2.0 0
1 3.0 4.0 1
2 NaN NaN 5
In [5]:
# 하나라도 Null이 있는 컬럼 drop
df.dropna(axis=1, how= 'any') 
Out[5]:
D
0 0
1 1
2 5
In [6]:
# 전부다 Null인 열 drop
df.dropna(axis=0, how='all')
Out[6]:
A B C D
0 NaN 2.0 NaN 0
1 3.0 4.0 NaN 1
2 NaN NaN NaN 5
In [7]:
# 하나라도 Null이 있는 열 drop
df.dropna(axis=0, how='any')
Out[7]:
A B C D


df.fillna : NaN 을 지정해준 값으로 채워줌

In [8]:
# 결측치 0으로 채우기
df.fillna(0)
Out[8]:
A B C D
0 0.0 2.0 0.0 0
1 3.0 4.0 0.0 1
2 0.0 0.0 0.0 5
In [9]:
# 딕셔너리를 사용해서 컬럼별로 지정값으로 채우기
values = { 'A' : 0, 'B': 1, 'C': 2, 'D': 3}
df.fillna(value=values)
Out[9]:
A B C D
0 0.0 2.0 2.0 0
1 3.0 4.0 2.0 1
2 0.0 1.0 2.0 5
In [10]:
# 결측치를 중앙값으로 채우기
fill_na_value = df['D'].median()
df.fillna(fill_na_value)
Out[10]:
A B C D
0 1.0 2.0 1.0 0
1 3.0 4.0 1.0 1
2 1.0 1.0 1.0 5
In [11]:
# 컬럼별로 결측치 데이터 갯수 확인
df.isnull().sum() 
Out[11]:
A    2
B    1
C    3
D    0
dtype: int64
In [12]:
# 컬럼별로 결측치가 아닌 데이터 갯수 확인
df.notnull().sum()
Out[12]:
A    1
B    2
C    0
D    3
dtype: int64

+ Recent posts