1. 결측 데이터 처리

👩🏻‍🚀  판다스는 누락된 데이터를 표시할 때 NaN (Not a Number)로 표기하며, 연산에는 표함되지 않음

 

 

1) 결측 데이터 확인

 

✏️  isna() 메서드는 값이 NaN일 때 True, 아닌 경우엔 False 반환

✏️  isnull() 메서드는 결측 데이터이면 True 반환, 유효한 데이터가 존재하면 False를 반환
      ⚡️  isna(), isnull()은 기능적으로 동일

import pandas as pd

df = pd.read_csv('../input/weather.csv', index_col='date')
# 두 개다 결과가 같다.
df['max_wind'].isna()
df['max_wind'].isnull()

'''
출력 결과)
2010-08-01,False
2010-08-02,False
2010-08-03,False
2010-08-04,False
2010-08-05,False
2010-08-06,False
2010-08-07,False
2010-08-08,False
2010-08-09,False
2010-08-10,False
'''

 


 

①  결측 데이터 개수 확인

df.isnull().sum()

'''
temp         0
max_wind     4
mean_wind    6
dtype: int64
'''
df.isnull().value_counts()

'''
temp   max_wind  mean_wind
False  False     False        3646
                 True            3
       True      True            3
                 False           1
Name: count, dtype: int64
'''

 

✏️  notnull()은 유효한 데이터가 존재하면 True를 반환, 결측 데이터면 False를 반환

df.notnull().sum()

'''
temp         3653
max_wind     3649
mean_wind    3647
dtype: int64
'''

 


 

2) 결측 데이터 삭제

 

✏️  결측 데이터를 다루는 가장 간단한 방법은 결측 데이터를 가진 행이나 열을 삭제
✏️  판다스에서 dropna()를 이용하여 삭제 할 수 있다.

✏️  행 데이터 중 어느 한 변수에도 결측치가 있는 경우 삭제되므로 향후 제거한 데이터프레임을 사용하려면 다른 이름으로 저장해야 함

 DataFrame.dropna(axis, how, thresh, subset, inplace)

 

 

  📍 axis : 축을 행 또는 열로 결정
         ➡️  0 또는 'index'이면 누락된 값이 포함된 행을 삭제
         ➡️  1 또는 'columns'이면 누락된 값이 포함된 열을 삭제
         ➡️  기본값은 0
  📍 how any는 null 값이 있는 경우 행 또는 열을 삭제
                    all은 모든 값이 누락된 경우 행 또는 열을 삭제
                    기본값은 any
  📍 inplace : 데이터프레임에 나온 값을 저장할 것인지를 설정하는 변수로 기본적으로 값은 False

 

# 결측 데이터가 있는 행 삭제 후 확인
df2 = df.dropna()  # 옵션을 지정하지 않아서 행기준, NaN가 하나라도 있는 경우에 삭제.
df2.isnull().sum()

'''
temp         0
max_wind     0
mean_wind    0
dtype: int64
'''

 

# 원본 데이터는 변경 x
df.isnull().sum()
'''
temp         0
max_wind     4
mean_wind    6
dtype: int64
'''

 


 

3)  결측 데이터 대체

 

✏️  fillna() : 결측 데이터를 특정 값으로 채움. inplace를 True로 설정해 원본 데이터를 수정

# 결측 데이터 대체하기 : 평균값으로 대체
df['max_wind'].fillna(df['max_wind'].mean(), inplace=True)
df['mean_wind'].fillna(df['mean_wind'].mean(), inplace=True)

# 결측 데이터 대체 후 확인
df.isna().sum()
'''
temp         0
max_wind     0
mean_wind    0
dtype: int64
'''

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

+ Recent posts