[STUDY]/[NAVER_boostcourse]

결측치 다루기

eunma 2024. 8. 10. 15:57

학습 목표

  • 결측치를 처리하는 방법을 익힌다.

강의 자료

네이버 부스트코스


핵심 키워드

  • isnull() : 데이터프레임에 결측값이 있는지 여부를 확인. True = 결측값/ False = 결측값 없음.
  • sum() : 각 열에 있는 결측값의 총합 계산
  • plot
    1.plot() : 기본적인 선 그래프
    2.plot.bar() : 수직 막대 그래프
    3.plot.barh() : 수평 막대 그래프
  • reset_index : 데이터프레임의 인덱스를 리셋하여 새로운 정수형 인덱스를 부여
  • sort_values() : 데이터프레임을 특정(여러) 열을 기준으로 정렬하는 함수
  • NaN : not a number - 결측값을 나타내는 표준
  • drop() : 데이터프레임에서 특정 행(axis=0)/열(axis=1)을 제거하는데 사용

학습내용

결측치 확인하기

null_count = df.isnull().sum()
null_count
  • null_count 라는 변수에 isnull().sum()을 해서 각 column 별 결측치의 개수를 확인합니다.
  • 결과 :

  • 여기서 boolean indexing을 사용하는데요, True는 1이니 isnull()을 하여 해당 데이터가 결측치라면 True를 출력하고, sum()은 True의 개수를 세줍니다.

결측치 시각화하기

1) 기본 그래프

null_count.plot()
  • 결측치의 갯수를 시각화합니다. 기본값으로 line 그래프를 그려줍니다.
  • 결과 :
  • plot.에서 tab 키를 누르면 그릴 수 있는 다른 그래프들을 보여줍니다.

2) bar 그래프

null_count.plot.bar()
  • bar 그래프를 그리면 아래와 같은 그래프를 보실 수 있습니다. 그런데 글자들이 겹쳐서 잘 안 보이니 글자들을 기울여보겠습니다.
  • 결과 :
null_count.plot.bar(rot=60)
  • rot를 옵션으로 지정해주면 글자들이 회전하여 표시됩니다.
  • 결과 :

3) barh 그래프

null_count.plot.barh(figsize=(5,7))
  • barh()로 세로 막대형 그래프를 그리면 글씨를 보기에 더욱 좋습니다. figsize(5,7)로 사이즈도 지정해줍니다.
  • 결과 :

데이터 프레임 형태로 변형하기

1) 인덱스 초기화하기

df_null_count = null_count.reset_index
df_null_count.head()
  • reset_index를 활용하면 데이터 프레임 형태로 변환이 됩니다.
  • 결과 :

2) 새로운 칼럼명 지정하기

df_null_count.columns = ["컬럼명", "결측치수"]
df.null_count.head()
  • 새로운 칼럼명을 지정할 수 있습니다.
  • 결과 :
  • 결측치만 보기
  • sort_values()의 옵션에서 by로 기준 column를 설정하고, ascending으로 오름차순, 내림차순 정렬을 지정합니다.
df.null_count.sort_values(by="결측치수", ascending=False)
  • 결측치수를 기준으로 내림차순 정렬을 합니다.
  • 결과 :
df_null_count_top = df.null_count.sort_values(by="결측치수", ascending=False).head(10)
  • 상위 10개만 뽑기 위해 head(10)을 지정하고, 이 DataFrame을 df_null_count_top이라는 변수에 넣습니다.

결과 :


특정 컬럼만 불러오기

  • NaN : Not a Number의 약자로 결측치로 보면 됩니다.
df["지점명"].head()
  • 결측치의 상황을 확인합니다.
  • 결과 :

1) column명 리스트화하기

drop_columns = df_null_count_top["컬럼명"].tolist()
  • 삭제할 column의 이름을 리스트 형태로 만듭니다.
  • 결과 :

2) 삭제할 column 확인하기

df[drop_columns].head()
  • 삭제할 column을 조회합니다.
  • 결과 :

3) 삭제하기

  • drop에도 다양한 옵션이 있음을 확인할 수 있습니다.
print(df)
df = df.drop(drop_columns, axis=1)
print(df)
  • 열을 기준으로 삭제해야 하기 때문에 axis = 1을 지정합니다. 행을 삭제하려면 0을 넣어야 합니다.
  • 결과 :
  • drop을 한 후, 39개였던 열이 29개가 되었고, 메모리도 20MB로 줄어들었습니다.