4. 데이터프레임 변경
4.2.1 결측치 처리
- 결측치(NaN)은 정확한 분석을 방해, 오류가 발생할 수 있음
# 라이브러리 불러오기
import pandas as pd
import numpy as np
import seaborn as sns
# 타이타닉 데이터 불러오기
titanic = sns.load_dataset(('titanic'))
# survived, pclass, sex, age, embarked 컬럼만 조회할 수 있는 데이터 프레임 생성
df = titanic[['survived','pclass','sex','age','embarked']]
df
- 결측치 찾기
- info()
# info()
df.info()
=> info() 함수를 통해 데이터 정보 확인.
=> 결측치는 Non-Null Count로 확인할 수 있음 : 결측치가 아닌 데이터 행 수
=> 전체 행 개수는 891 entries로 891개
=> age 컬럼 : 714 non-null, embarked 컬럼 : 889 non-null로 결측치 행이 존재한다는 것을 알 수 있음
- isna() / notnull()
- isna() : 결측치면 True, 값이 있으면 False 반환 ( isnull() 사용가능 )
- notnull() : 결측치면 False, 값이 있으면 True 반환
# 결측치 확인
df.isna()
=> 값이 결측치면 True, 값이 있으면 False
** 결측치 개수 확인
# 결측치 개수 확인
df.isna().sum()
=> 각 컬럼의 결측치 개수 확인
- 결측치 제거
- 결측치 행 제거
# df를 복사하여 df1 데이터프레임 생성
df1 = df.copy()
# 결측치가 하나라도 있는 행 제거
df1.dropna(axis=0, inplace=True)
df1.isna().sum()
=> 결측치가 있는 행을 모두 제거한 후, 결측치가 없는 것을 확인할 수 있다.
- 특정 컬럼, 결측치 행 제거
# 데이터프레임 복사
df2 = df.copy()
# age 열이 결측치인 행 제거
df2.dropna(subset='age', axis=0, inplace=True)
df2.isna().sum()
=> age 컬럼의 결측치를 모두 제거함
- 결측치 있는 컬럼 제거
# 데이터프레임 복사
df3 = df.copy()
# 결측치가 있는 열 제거
df3.dropna(axis=1, inplace=True)
df3.isna().sum()
=> 결측치가 있는 age, embarked 컬럼 제거
- 결측치 채우기
- fillna() : 결측값을 특정값으로 대체
# 데이터프레임 복사
df4 = df.copy()
# age 평균 구하기
mean_age = df4['age'].mean()
# 결측치를 평균값으로 채우기
df4['age'].fillna(mean_age, inplace=True)
df4.isna().sum()
=> age 평균을 구하여, 결측치를 age평균으로 대체함
=> fillna(대체할 값, inplace = True) : 옵션으로 대체할 값을 넣음면 결측치를 대체할 수 있음
- 직전 행, 바로 다음 행으로 대체
# 데이터프레임 복사
df5 = df.copy()
# age 컬럼의 누락된 값을 바로 앞의 값으로 채우기
df5['age'].fillna(method='ffill', inplace=True)
# embarked 컬럼의 누락된 값을 바로 뒤의 값으로 채우기
df5['embarked'].fillna(method='bfill', inplace=True)
df5.isna().sum()
=> method='ffill' : 결측치 바로 앞의 값으로 결측치 대체
=> method='bfill' : 결측치 바로 뒤의 값으로 결측치 대체
- interpolate() : 선형보간법으로 대체
# 데이터프레임 복사
df6 = df.copy()
# 선형보간법으로 채우기
df6['age'].interpolate(method='linear', inplace=True)
df6.isna().sum()
=> 선형보간법을 이용하여 결측치 대체
** 선형보간법 : 1차원 직선상에서 두 점의 값이 주어졌을 때,
그 사이의 값을 추정하기 위해 직선 거리에 따라 선형적으로 계산(비례식)하는 방법
4.2.1 가변수(Dummy Variable) 만들기
- One-Hot-Encoding이라고도 부름
- get_dummies() 함수 사용
=> 위 사진처럼 범주형 변수의 값에 따라 해당하는 값을 갖고 있으면 1, 없으면 0으로 나타낸다. (숫자로 변환)
1) 범주형 변수 확인
# 데이터 정보 확인
df.info()
=> Dtype에서 object인 컬럼이 주로 범주형 변수임
print(df['sex'].value_counts())
print('='*20)
print(df['embarked'].value_counts())
=> sex 컬럼은 male : 577개, female : 314개 // embarked 컬럼은 S : 644개, C : 168개, Q : 77개를 갖는 범주형 변수
2) 가변수화
# 가변수화 진행할 변수: sex, embarked
cols = ['sex', 'embarked']
df = pd.get_dummies(df, columns=cols, drop_first=True)
df.head()
=> 가변수화할 변수를 리스트로 저장하여 일괄 처리함
=> sex_male이 1이면 남자, 0이면 여자
=> embarked_Q, embarked_S 둘다 0이면 C
=> embarked_Q만 1이면 Q
=> embarked_S만 1이면 S
=> drop_first=True 옵션으로 범주형 변수 하나 제거하여 생성
** sex_male의 1은 sex_female의 0과 같기 때문에 하나를 제거하여 컬럼을 줄여주는 것이 좋음
'Python 파이썬' 카테고리의 다른 글
파이썬 데이터프레임 집계 (0) | 2023.02.24 |
---|---|
파이썬 데이터프레임 - pandas 기초(4-3) (0) | 2023.02.23 |
파이썬 데이터프레임 - pandas 기초(4-1) (0) | 2023.02.21 |
파이썬 데이터프레임 - pandas 기초(3) (0) | 2023.02.20 |
파이썬 데이터프레임 - pandas 기초(2) (0) | 2023.02.20 |