10) Missing Data
10. 결측치
비어 있는 데이터
import pandas as pd
df = pd.read_excel('score.xlsx', index_col='지원번호')
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 | 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# |
데이터 채우기 fillna
df.fillna('') # NaN 데이터를 빈칸으로 채움
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | 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# |
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# |
import numpy as np
df['학교'] = np.nan # 학교 데이터 전체를 NaN 으로 채움
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# |
df.fillna('모름', inplace = True)
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# |
df = pd.read_excel('score.xlsx', index_col='지원번호')
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 | 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# |
df['SW특기'].fillna('확인 중',inplace=True) # SW특기 데이터 중에서 NaN에 대해서 채움
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
df = pd.read_excel('score.xlsx', index_col='지원번호')
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 | 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# |
df.dropna(inplace = True) # NaN을 포함하는 데이터 삭제
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 = pd.read_excel('score.xlsx', index_col='지원번호')
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 | 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# |
-
axis : index or columns
-
how : any or all
df.dropna(axis='index', how='any') # NaN 가 하나라도 있는 row 삭제
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | 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='columns') # NaN이 하나라도 있는 columns 삭제 (how의 default 값: 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 |
df['학교'] = np.nan
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# |
df.dropna(axis='columns', how='all') # 데이터 전체가 NaN인 경우에만 columns 삭제
| 이름 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | 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# |
댓글남기기