반응형
Notice
Recent Posts
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Today
Total
관리 메뉴

H-Log

[python] pandas 결측치(비어있는 데이터) 처리 본문

dev-log/python

[python] pandas 결측치(비어있는 데이터) 처리

hong6v6 2023. 1. 17. 18:32
반응형

출처 : 나도코딩 https://www.youtube.com/watch?v=PjhlUzp_cU0&t=10533

import pandas as pd

# excel 파일 열기
df = pd.read_excel('score.xlsx', index_col='지원번호')
이름   학교    키   국어   영어   수학  과학  사회        SW특기
지원번호
1번    채치수  북산고  197   90   85  100  95  85      Python
2번    정대만  북산고  184   40   35   50  55  25        Java
3번    송태섭  북산고  168   80   75   70  80  75  Javascript
4번    서태웅  북산고  187   40   60   70  75  80         NaN
5번    강백호  북산고  188   15   20   10  35  10         NaN
6번    변덕규  능남고  202   80  100   95  85  80           C
7번    황태산  능남고  188   55   65   45  40  35      PYTHON
8번    윤대협  능남고  190  100   85   90  95  95          C#

데이터 중 SW특기에 있는 NaN과 같은 비어있는 데이터를 처리하도록 해보자

데이터 채우기 : fillna

data frame의 모든 NaN값이 채워진다.

  • 빈 문자열로 채우기
print(df.fillna(''))
이름   학교    키   국어   영어   수학  과학  사회        SW특기
지원번호
1번    채치수  북산고  197   90   85  100  95  85      Python
2번    정대만  북산고  184   40   35   50  55  25        Java
3번    송태섭  북산고  168   80   75   70  80  75  Javascript
4번    서태웅  북산고  187   40   60   70  75  80         
5번    강백호  북산고  188   15   20   10  35  10         
6번    변덕규  능남고  202   80  100   95  85  80           C
7번    황태산  능남고  188   55   65   45  40  35      PYTHON
8번    윤대협  능남고  190  100   85   90  95  95          C#
  • ‘없음’이라고 채우기
print(df.fillna('없음'))
이름   학교    키   국어   영어   수학  과학  사회        SW특기
지원번호
1번    채치수  북산고  197   90   85  100  95  85      Python
2번    정대만  북산고  184   40   35   50  55  25        Java
3번    송태섭  북산고  168   80   75   70  80  75  Javascript
4번    서태웅  북산고  187   40   60   70  75  80          없음
5번    강백호  북산고  188   15   20   10  35  10          없음
6번    변덕규  능남고  202   80  100   95  85  80           C
7번    황태산  능남고  188   55   65   45  40  35      PYTHON
8번    윤대협  능남고  190  100   85   90  95  95          C#
  • numpy

원래는 모든 NaN데이터가 채워지는데, 지금은 SW특기에서만 보여지니 ‘학교’ 데이터를 의도적으로 Nan으로 바꿔주자

의도적으로 NaN으로 바꾸기 위해 numpy를 설치해주자

pip install numpy
import numpy as np

df['학교'] = np.nan
print(df)
이름  학교    키   국어   영어   수학  과학  사회        SW특기
지원번호
1번    채치수 NaN  197   90   85  100  95  85      Python
2번    정대만 NaN  184   40   35   50  55  25        Java
3번    송태섭 NaN  168   80   75   70  80  75  Javascript
4번    서태웅 NaN  187   40   60   70  75  80         NaN
5번    강백호 NaN  188   15   20   10  35  10         NaN
6번    변덕규 NaN  202   80  100   95  85  80           C
7번    황태산 NaN  188   55   65   45  40  35      PYTHON
8번    윤대협 NaN  190  100   85   90  95  95          C#

이 상태에서 다시 fillna를 사용해보자

df.fillna('모름', inplace=True)
print(df)
이름  학교    키   국어   영어   수학  과학  사회        SW특기
지원번호
1번    채치수  모름  197   90   85  100  95  85      Python
2번    정대만  모름  184   40   35   50  55  25        Java
3번    송태섭  모름  168   80   75   70  80  75  Javascript
4번    서태웅  모름  187   40   60   70  75  80          모름
5번    강백호  모름  188   15   20   10  35  10          모름
6번    변덕규  모름  202   80  100   95  85  80           C
7번    황태산  모름  188   55   65   45  40  35      PYTHON
8번    윤대협  모름  190  100   85   90  95  95          C#

학교를 포함안 모든 NaN데이터가 ‘모름’으로 채워져있는걸 확인할 수 있다.

일부 col의 NaN 채우기

df['SW특기'].fillna('확인중', inplace=True)
print(df)
이름   학교    키   국어   영어   수학  과학  사회   SW특기
지원번호
1번    채치수  북산고  197   90   85  100  95  85      Python
2번    정대만  북산고  184   40   35   50  55  25        Java
3번    송태섭  북산고  168   80   75   70  80  75  Javascript
4번    서태웅  북산고  187   40   60   70  75  80         확인중
5번    강백호  북산고  188   15   20   10  35  10         확인중
6번    변덕규  능남고  202   80  100   95  85  80           C
7번    황태산  능남고  188   55   65   45  40  35      PYTHON
8번    윤대협  능남고  190  100   85   90  95  95          C#

데이터 제외하기 : dropna

전체 데이터 중 하나라도 데이터가 없는 row를 아예 삭제할 수 있다

df.dropna(inplace=True)
print(df)
이름   학교    키   국어   영어   수학  과학  사회   SW특기
지원번호
1번    채치수  북산고  197   90   85  100  95  85      Python
2번    정대만  북산고  184   40   35   50  55  25        Java
3번    송태섭  북산고  168   80   75   70  80  75  Javascript
6번    변덕규  능남고  202   80  100   95  85  80           C
7번    황태산  능남고  188   55   65   45  40  35      PYTHON
8번    윤대협  능남고  190  100   85   90  95  95          C#

삭제 기준

df.dropna(axis='index', how='any')
  • axis : 데이터가 없을 시 삭제할 내용
    • index : row 삭제
    • columns : column 삭제
  • how
    • any : 하나라도 있을 시 삭제
    • all : row또는 col이 모두 NaN일 시 삭제
  • NaN이 하나라도 있는 row 삭제 (기본값)
df.dropna(axis='index', how='any')
이름   학교    키   국어   영어   수학  과학  사회   SW특기
지원번호
1번    채치수  북산고  197   90   85  100  95  85      Python
2번    정대만  북산고  184   40   35   50  55  25        Java
3번    송태섭  북산고  168   80   75   70  80  75  Javascript
6번    변덕규  능남고  202   80  100   95  85  80           C
7번    황태산  능남고  188   55   65   45  40  35      PYTHON
8번    윤대협  능남고  190  100   85   90  95  95          C#
  • NaN이 하나라도 있는 column 삭제
df.dropna(axis='colums', how='any')
이름   학교    키   국어   영어   수학  과학  사회
지원번호
1번    채치수  북산고  197   90   85  100  95  85
2번    정대만  북산고  184   40   35   50  55  25
3번    송태섭  북산고  168   80   75   70  80  75
4번    서태웅  북산고  187   40   60   70  75  80
5번    강백호  북산고  188   15   20   10  35  10
6번    변덕규  능남고  202   80  100   95  85  80
7번    황태산  능남고  188   55   65   45  40  35
8번    윤대협  능남고  190  100   85   90  95  95
  • 모든 col 데이터가 NaN일 때 삭제

테스트를 위해 ‘학교’ 데이터를 모두 NaN으로 바꿔주고 실행해보자

df['학교']= np.nan
df.dropna(axis='columns', how='all', inplace=True)

print(df)
이름    키   국어   영어   수학  과학  사회
지원번호
1번    채치수  197   90   85  100  95  85
2번    정대만  184   40   35   50  55  25
3번    송태섭  168   80   75   70  80  75
4번    서태웅  187   40   60   70  75  80
5번    강백호  188   15   20   10  35  10
6번    변덕규  202   80  100   95  85  80
7번    황태산  188   55   65   45  40  35
8번    윤대협  190  100   85   90  95  95

이름 학교 키 국어 영어 수학 과학 사회 SW특기 지원번호 1번 채치수 북산고 197 90 85 100 95 85 Python 2번 정대만 북산고 184 40 35 50 55 25 Java 3번 송태섭 북산고 168 80 75 70 80 75 Javascript 6번 변덕규 능남고 202 80 100 95 85 80 C 7번 황태산 능남고 188 55 65 45 40 35 PYTHON 8번 윤대협 능남고 190 100 85 90 95 95 C#

이름 키 국어 영어 수학 과학 사회 지원번호 1번 채치수 197 90 85 100 95 85 2번 정대만 184 40 35 50 55 25 3번 송태섭 168 80 75 70 80 75 4번 서태웅 187 40 60 70 75 80 5번 강백호 188 15 20 10 35 10 6번 변덕규 202 80 100 95 85 80 7번 황태산 188 55 65 45 40 35 8번 윤대협 190 100 85 90 95 95

반응형

'dev-log > python' 카테고리의 다른 글

[python] pandas 데이터 수정  (0) 2023.01.17
[python] pandas 데이터 정렬  (0) 2023.01.17
[python] pandas 데이터 선택  (0) 2023.01.17
[python] pandas 데이터 확인  (0) 2023.01.17
[python] pandas 파일 저장 및 열기  (0) 2023.01.17
Comments