이번 포스팅에서는 데이터프레임의 일부분을 삭제하는 방법, 결측치의 정의와 결측치를 처리하는 방법에 대해 알아보겠습니다.
실습준비
구글 드라이브 업로드
finalterm.csv 다운로드 -> google drive -> 내 드라이브 -> Data -> 업로드
colab 실행
# 구글 드라이브 마운트
from google.colab import drive
drive.mount('/content/drive')
# 판다스 라이브러리
import pandas as pd
finalterm = pd.read_csv('finalterm.csv') # 파일경로
finalterm
finalterm = finalterm.set_index("name")
finalterm
특정 데이터 삭제하기
finalterm 데이터를 보시면 명수 학생만 2반이고, 체육 과목의 성적에 결측값(NaN)이 있는 등 문제점이 보입니다. 먼저 명수 학생의 데이터를 삭제해보겠습니다.
finalterm = finalterm.drop("명수")
finalterm
다음으로 결측값이 있는 체육 과목 데이터를 삭제해보겠습니다.
finalterm = finalterm.drop(columns = "P.E")
finalterm
여러 열을 삭제하는 경우 리스트의 형태로 columns에 값을 넘겨주면 됩니다.
# 여러 열을 삭제하기
finalterm.drop(columns = ['music', 'fine arts'])
또 다른 방법
# axis 파라미터를 통해 행 삭제하기
finalterm.drop("명수", axis = 0) # 0 또는 index 사용
# axis 파라미터를 통해 열 삭제하기
finalterm.drop("P.E", axis = 1) # 1 또는 columns 사용
<실행결과는 이전과 같음>
참고사항
- NaN (Not a Number) : 수치 데이터에서 결측치 또는 유효하지 않은 값을 나타내기 위해 사용되는 특별한 값입니다.
- 원본 데이터를 수정하는 경우 다음 명령어들은 원본데이터에 수정된 데이터를 할당하여야 합니다.
결측치 처리
결측치 정의
결측치는 데이터셋에서 값이 비어있거나 기록되지 않았거나 누락된 값을 의미합니다. 결측치는 데이터 분석 과정에서 자주 발생하는 문제로, 일반적으로 데이터를 수집하거나 처리하는 과정에서 값이 누락되었을 때 나타납니다.
결측치를 처리해야 하는 이유
결측치의 문제점
결측치는 데이터 분석이나 모델링 과정에서 여러 가지 문제를 일으킬 수 있습니다.
- 통계적 분석의 왜곡: 결측치가 많으면 평균, 표준편차와 같은 통계적 지표가 왜곡될 수 있습니다.
- 모델링의 문제: 결측치가 포함된 데이터를 그대로 머신러닝 모델에 적용하면 성능이 저하되거나, 에러가 발생할 수 있습니다.
결측치 확인
df.info()
# 각 데이터별 결측치 존재 유무 확인
finalterm.info()
<class 'pandas.core.frame.DataFrame'>
Index: 11 entries, 철수 to 명수
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 class 11 non-null int64
1 korean 11 non-null int64
2 math 11 non-null int64
3 english 11 non-null int64
4 science 11 non-null int64
5 music 11 non-null object
6 fine arts 11 non-null object
7 P.E 9 non-null object
dtypes: int64(5), object(3)
memory usage: 792.0+ bytes
여기서 non-null은 각 열에서 결측치가 아닌 값의 개수를 의미합니다. 즉, 전체 데이터 11개 중 11개가 non-null이면 결측치가 없다는 것입니다.
df.isna()
# 불린 형태로 결측치 확인하기
finalterm.isna()
False는 결측값이 아닌 정상값을 의미하며, True는 결측값을 의미합니다.
df.isna().sum() 또는 pd.isna(df).sum()
# 시리즈 형태로 각 데이터 별 결측치 갯수 확인하기
print(pd.isna(finalterm).sum())
class 0
korean 0
math 0
english 0
science 0
music 0
fine arts 0
P.E 2
dtype: int64
다음 명령어를 통해 체육 과목에 결측값이 2개 존재하는 것을 확인할 수 있습니다.
처리 방법
결측치를 처리하는 방법으로 크게 두 가지 방법이 있습니다. 각 방법은 데이터의 형태 특성에 따라 적재적소로 활용하면 됩니다.
결측치 제거
dropna()
# 결측치가 존재하는 모든 행 삭제하기
finalterm.dropna()
결측값이 존재한 준호학생과 명수학생의 데이터가 삭제된 것을 확인할 수 있습니다.
# 특정한 열에 존재하는 결측치를 기준으로 행 삭제하기
finalterm.dropna(subset = ['P.E'])
현재 데이터에서는 실행결과가 같지만, 만약 다른 과목에서도 결측값이 존재했다면, subset으로 할당한 변수 외의 결측값은 그대로 남아있습니다.
사용하는 경우
- 결측값 개수가 적어서 삭제해도 큰 영향을 주지 않을 때
- 열이나 행에 있는 값들이 거의 다 결측값일 때
결측치를 다른 값으로 채우기
결측치를 삭제할 경우 데이터의 크기가 작아져 데이터 분석이 원활하게 되지 않을 수 있습니다. 그래서 원본데이터와 비교하여 결측값을 채우는 방법 또는 예상되는 예측값으로 채우는 방법이 있습니다. 여기서는 최빈값을 이용하여 결측값을 채우겠습니다.
df['변수명'].value_counts()
# 최빈값 살펴보기
finalterm['P.E'].value_counts()
df.fillna(값)
# 최빈값으로 결측값 채우기
finalterm.fillna("B")
사용하는 경우
- 연속형 숫자 데이터는 평균(mean)이나 중간값(median)을 주로 사용
- 범주형 데이터는 최빈값(mode)을 주로 사용
결측치는 아니지만 일관성이 없이 따로 노는 데이터가 아직 존재합니다. 바로 혼자 2반인 명수 학생의 데이터 인데요(반은 1반만 존재하는 것으로 간주할 때), 이러한 데이터를 이상치라고 부릅니다. 이러한 데이터는 어떻게 처리해야 할까요?
다음 포스팅에서는 이상치에 대해서 자세히 소개드리고 이상치를 처리하는 방법에 대해 알아보겠습니다.
'파이썬을 활용한 데이터 분석 입문' 카테고리의 다른 글
[Python]데이터 전처리 - 데이터 정제(3) 이상치 처리 (0) | 2024.08.11 |
---|---|
[Python]데이터 전처리 - 데이터 정제(2) 이상치 확인하기 (0) | 2024.08.10 |
[Python]데이터 전처리 - 데이터 인덱싱(2) 불린 인덱싱과 query (0) | 2024.08.08 |
[Python]데이터 전처리 - 데이터 인덱싱(1) iloc과 loc (2) | 2024.08.07 |
데이터프레임을 이용한 데이터 조작 및 분석(3) - copy, 파생변수 만들기 (0) | 2024.08.06 |