바뀜

1,124 바이트 추가됨 ,  2023년 2월 1일 (수) 13:45
3번째 줄: 3번째 줄:     
= 시작하기 전에 =
 
= 시작하기 전에 =
 +
[[특성공학:pandas]]를 보고 오자.
 +
 
결측치를 처리하기 전에 전체적인 데이터셋이 어떤 형태인지 파악할 필요가 있다.
 
결측치를 처리하기 전에 전체적인 데이터셋이 어떤 형태인지 파악할 필요가 있다.
 
{| class="wikitable"
 
{| class="wikitable"
25번째 줄: 27번째 줄:  
|df.isnull().sum()
 
|df.isnull().sum()
 
|-
 
|-
|
+
|셀별 null 파악
|
+
|각 데이터가 비었는지, 채워져 있는지 True, False로 보여준다.
|
+
|pd.isna(df)
 
|}
 
|}
   38번째 줄: 40번째 줄:  
!예시
 
!예시
 
|-
 
|-
|버리기
+
|열 단위
 
|<syntaxhighlight lang="python">
 
|<syntaxhighlight lang="python">
 +
# 열 단위로 버리기
 
# 결측치가 하나라도 있는 열을 찾는다.
 
# 결측치가 하나라도 있는 열을 찾는다.
 
cols_with_missing = [col for col in X_train.columns if X_train[col].isnull().any()]
 
cols_with_missing = [col for col in X_train.columns if X_train[col].isnull().any()]
 
+
# 해당 버리기
# 해당 버리기.
   
reduced_X_train = X_train.drop(cols_with_missing, axis=1)
 
reduced_X_train = X_train.drop(cols_with_missing, axis=1)
 
reduced_X_valid = X_valid.drop(cols_with_missing, axis=1)
 
reduced_X_valid = X_valid.drop(cols_with_missing, axis=1)
 +
</syntaxhighlight>
 +
|-
 +
|행 단위 버리기
 +
|<syntaxhighlight lang="python">
 +
# 행 단위로 버리기
 +
df = df.dropna()  # 하나의 속성이라도 비어있으면 행 째로 버린다.
 +
df = df.dropna(subset = ['검사할열', '검사할열2', ...])  # 검사할 열에 결측치가 있으면 버린다.
 
</syntaxhighlight>
 
</syntaxhighlight>
 
|}
 
|}
    
== 채우기 ==
 
== 채우기 ==
 +
다양한 방식의 채우기가 가능하다.
 +
 +
fillna 함수를 이용한다.
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
60번째 줄: 72번째 줄:  
test_train_X = pd.DataFrame(imputer.transform(test_X))  # 테스트용 데이터에 결측치 채워넣기.(위에서 사용하는 메서드와 다르다. 무슨 차이일까..)
 
test_train_X = pd.DataFrame(imputer.transform(test_X))  # 테스트용 데이터에 결측치 채워넣기.(위에서 사용하는 메서드와 다르다. 무슨 차이일까..)
 
</syntaxhighlight>[어떤 값으로 채우는 걸까?]
 
</syntaxhighlight>[어떤 값으로 채우는 걸까?]
 +
결측치를 채우는 것만으로도 정밀도가 올라가는 경우가 많다.
 +
 
SimpleImputer(strategy='median')
 
SimpleImputer(strategy='median')
   −
데이터프레임을 사용하는 경우, <code>fillna(채울값)</code> 함수가 준비되어 있다.
+
 
 +
|-
 +
|평균으로 채우기
 +
|열2 안의 결측치를 채우고 싶을 때 단순 평균을 넣을 수도 있지만, 열1이 같은 집단의 평균을 구해 넣는 게 더 정확할 것이다.(예컨대, 평균나이가 빠졌다면 남성의 결측치는 남성의 평균나이를 넣는 것.)
 +
df.filna(df.groupby['열1'])['열2'].transform('median'), inplace=True)
 +
|-
 +
|바로 위 데이터로
 +
|해당 결측치가 위 데이터와 별반 다르지 않으리라 예상되는 경우 위 데이터의 값을 그대로 사용한다.
    
df.fillna(method = 'ffill')  # 비어 있을 경우, 바로 위 데이터를 입력
 
df.fillna(method = 'ffill')  # 비어 있을 경우, 바로 위 데이터를 입력
 
+
|-
df.fillna(method = 'bfill')  # 비어 있을 경우, 바로 아래 데이터를 입력
+
|바로 아래 데이터로
 +
|df.fillna(method = 'bfill')  # 비어 있을 경우, 바로 아래 데이터를 입력
 
|}
 
|}
   93번째 줄: 115번째 줄:  
|}
 
|}
 
[[분류:결측치 다루기]]
 
[[분류:결측치 다루기]]
 +
[[분류:Pandas]]