데이터 분석 기초
11.결측치
세용용용용
2023. 3. 13. 23:43
11.결측치¶
비어 있는 데이터
In [2]:
import pandas as pd
df = pd.read_csv('score.csv')
df
Out[2]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | 북산고 | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | 북산고 | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | 북산고 | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | 북산고 | 187 | 40 | 60 | 70 | 75 | 80 | NaN |
| 4 | 강백호 | 북산고 | 188 | 15 | 20 | 10 | 35 | 10 | NaN |
| 5 | 변덕규 | 능남고 | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | 능남고 | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | 능남고 | 190 | 100 | 85 | 90 | 95 | 95 | C# |
데이터 채우기 fillna¶
In [3]:
df.fillna('') #nan 데이터를 빈 칸으로 채움
Out[3]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | 북산고 | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | 북산고 | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | 북산고 | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | 북산고 | 187 | 40 | 60 | 70 | 75 | 80 | |
| 4 | 강백호 | 북산고 | 188 | 15 | 20 | 10 | 35 | 10 | |
| 5 | 변덕규 | 능남고 | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | 능남고 | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | 능남고 | 190 | 100 | 85 | 90 | 95 | 95 | C# |
In [5]:
df.fillna('없음')
Out[5]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | 북산고 | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | 북산고 | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | 북산고 | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | 북산고 | 187 | 40 | 60 | 70 | 75 | 80 | 없음 |
| 4 | 강백호 | 북산고 | 188 | 15 | 20 | 10 | 35 | 10 | 없음 |
| 5 | 변덕규 | 능남고 | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | 능남고 | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | 능남고 | 190 | 100 | 85 | 90 | 95 | 95 | C# |
넘파이(Numpy)는 파이썬에서 과학 연산을 위한 가장 널리 사용되는 패키지 중 하나입니다. 넘파이를 사용하면 다차원 배열을 다루기 쉽고 빠르게 연산할 수 있습니다.¶
In [15]:
import numpy as np
df['학교'] = np.nan #학교 데이터 전체를 nan으로 채움
df
Out[15]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | NaN | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | NaN | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | NaN | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | NaN | 187 | 40 | 60 | 70 | 75 | 80 | NaN |
| 4 | 강백호 | NaN | 188 | 15 | 20 | 10 | 35 | 10 | NaN |
| 5 | 변덕규 | NaN | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | NaN | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | NaN | 190 | 100 | 85 | 90 | 95 | 95 | C# |
In [18]:
#전체 데이터에 대해 nan값이 모름으로 바뀜
df.fillna('모름')
Out[18]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | 모름 | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | 모름 | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | 모름 | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | 모름 | 187 | 40 | 60 | 70 | 75 | 80 | 모름 |
| 4 | 강백호 | 모름 | 188 | 15 | 20 | 10 | 35 | 10 | 모름 |
| 5 | 변덕규 | 모름 | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | 모름 | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | 모름 | 190 | 100 | 85 | 90 | 95 | 95 | C# |
In [19]:
df
Out[19]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | NaN | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | NaN | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | NaN | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | NaN | 187 | 40 | 60 | 70 | 75 | 80 | NaN |
| 4 | 강백호 | NaN | 188 | 15 | 20 | 10 | 35 | 10 | NaN |
| 5 | 변덕규 | NaN | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | NaN | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | NaN | 190 | 100 | 85 | 90 | 95 | 95 | C# |
In [21]:
#특정 컬럼에 대해서만 nan 치환하기
df['SW특기'].fillna('모름', inplace = True)
df
Out[21]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | NaN | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | NaN | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | NaN | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | NaN | 187 | 40 | 60 | 70 | 75 | 80 | 모름 |
| 4 | 강백호 | NaN | 188 | 15 | 20 | 10 | 35 | 10 | 모름 |
| 5 | 변덕규 | NaN | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | NaN | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | NaN | 190 | 100 | 85 | 90 | 95 | 95 | C# |
데이터 제외하기drop¶
In [23]:
import pandas as pd
df = pd.read_csv('score.csv')
df
Out[23]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | 북산고 | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | 북산고 | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | 북산고 | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | 북산고 | 187 | 40 | 60 | 70 | 75 | 80 | NaN |
| 4 | 강백호 | 북산고 | 188 | 15 | 20 | 10 | 35 | 10 | NaN |
| 5 | 변덕규 | 능남고 | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | 능남고 | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | 능남고 | 190 | 100 | 85 | 90 | 95 | 95 | C# |
In [24]:
df.dropna() #전체 데이터 중에서 nan을 포함하는 데이터 삭제
Out[24]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | 북산고 | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | 북산고 | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | 북산고 | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 5 | 변덕규 | 능남고 | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | 능남고 | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | 능남고 | 190 | 100 | 85 | 90 | 95 | 95 | C# |
In [25]:
df.dropna(axis='index', how ='any')#nan가 하나라도 있는 row삭제
Out[25]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | 북산고 | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | 북산고 | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | 북산고 | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 5 | 변덕규 | 능남고 | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | 능남고 | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | 능남고 | 190 | 100 | 85 | 90 | 95 | 95 | C# |
In [29]:
df.dropna(axis='columns') #nan가 하나라도 있는 col삭제
Out[29]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | |
|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | 북산고 | 197 | 90 | 85 | 100 | 95 | 85 |
| 1 | 정대만 | 북산고 | 184 | 40 | 35 | 50 | 55 | 25 |
| 2 | 송태섭 | 북산고 | 168 | 80 | 75 | 70 | 80 | 75 |
| 3 | 서태웅 | 북산고 | 187 | 40 | 60 | 70 | 75 | 80 |
| 4 | 강백호 | 북산고 | 188 | 15 | 20 | 10 | 35 | 10 |
| 5 | 변덕규 | 능남고 | 202 | 80 | 100 | 95 | 85 | 80 |
| 6 | 황태산 | 능남고 | 188 | 55 | 65 | 45 | 40 | 35 |
| 7 | 윤대협 | 능남고 | 190 | 100 | 85 | 90 | 95 | 95 |
In [30]:
df['학교'] = np.nan
df
Out[30]:
| 이름 | 학교 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | NaN | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | NaN | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | NaN | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | NaN | 187 | 40 | 60 | 70 | 75 | 80 | NaN |
| 4 | 강백호 | NaN | 188 | 15 | 20 | 10 | 35 | 10 | NaN |
| 5 | 변덕규 | NaN | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | NaN | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | NaN | 190 | 100 | 85 | 90 | 95 | 95 | C# |
In [31]:
df.dropna(axis='columns', how='all') #데이터 전체가 nan인 경우 col삭제
Out[31]:
| 이름 | 키 | 국어 | 영어 | 수학 | 과학 | 사회 | SW특기 | |
|---|---|---|---|---|---|---|---|---|
| 0 | 채치수 | 197 | 90 | 85 | 100 | 95 | 85 | Python |
| 1 | 정대만 | 184 | 40 | 35 | 50 | 55 | 25 | Java |
| 2 | 송태섭 | 168 | 80 | 75 | 70 | 80 | 75 | Javascript |
| 3 | 서태웅 | 187 | 40 | 60 | 70 | 75 | 80 | NaN |
| 4 | 강백호 | 188 | 15 | 20 | 10 | 35 | 10 | NaN |
| 5 | 변덕규 | 202 | 80 | 100 | 95 | 85 | 80 | C |
| 6 | 황태산 | 188 | 55 | 65 | 45 | 40 | 35 | PYTHON |
| 7 | 윤대협 | 190 | 100 | 85 | 90 | 95 | 95 | C# |