- np.nan()
- .isna() : 결측치 True 표시해 출력
- .dropna() : 결측치가 있는 행 제거
subset = [] : [ ] 에서만 결측치 제거
변수 지정 안하면 하나라도 결측치면 제거.- pd.mead() , pd.sum() 같은 수치 연산 함수는 결측치 있으면 자동으로 제거 후 연산.
- .fillna() : 다른 값으로 대체
- value_counts() 로 이상치 들어 있는지 파악 후 이상치를 결측치로 바꿔서 제거 후 분석.
주의
np.where()은 반환 값 중에 문자가 있으면 np.nan을 지정 하더라도 NAN이 아니라 문자 'nan'을 반환하므로 주의.df = pd.DataFrame({'x1':[1,1,2,2]}) df['x2'] = np.where(df['x1']==1 , 'a',np.nan) df # x1 x2 0 1 a 1 1 a 2 2 nan 3 2 nan ### df.isna() # x1 x2 0 False False 1 False False 2 False False 3 False False
- 결측치로 만들 값에 문자를 부여해 해결
df['x2'] = np.where(df['x1']==1,'a','etc') df['x2'] = df['x2'].replace('etc',np.nan) df # x1 x2 0 1 a 1 1 a 2 2 NaN 3 2 NaN
- 어디까지를 정상 범위로 볼 것인지 정한 후 제거.
- box plot 을 이용해 중심에서 크게 벗어난 값 극단치로 간주.
import seaborn as sns sns.boxplot(data=mpg,y='hwy')
- (위에서부터) 극단치 - 극단치 경계 - 윗수염 - 3사분위수(Q3) - 2사분위수 - 1사분위수 - 아랫수염 -극단치 경계
- df.quantile() : 분위 수 구할 수 있다.
pct25 = mpg['hwy'].quantile(.25) pct25 # 18.0 # pct75 = mpg['hwy'].quantile(.75) pct75 # 27.0
- IQR : 1사분위수와 3사분위수의 거리.
iqr = pct75 -pct25- 하한 : 1사분위수 - 1.5* iqr 보다 작은 값.
- 상한 : 3사분위수 + 1.5*iqr 보다 큰 값.