오식랜드
[python] pandas 결측치(비어있는 데이터) 처리 본문
출처 : 나도코딩 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 |