6. 데이터 전처리
✔️ 널값
# = 비어 있는 데이터(값) = 누락 데이터
df = sns.load_dataset('titanic')
df.info()
# Non-Null Count
# 전체 행 개수가 891개 이므로 Non-Null Count도 891개 되어야 널값이 없는 것
# 891개보다 적으면 널값이 있으니 확인할 것
# 빈도표 = 해당 열 고유값 & NaN 미포함
df['deck'].value_counts()
# 빈도표 = 해당 열 고유값 & NaN 포함
df['deck'].value_counts(dropna = False)
# 널값을 직접 확인
# isnull()의 결과가 True = 널값, False = 널값이 아님
df.head().isnull()
# isnull()의 결과가 True = 널값이 아님, False = 널값
df.head().notnull()
✔️ 널값 개수
# 널값 개수 합 = 열 단위로 계산하는 것이 기본
df.isnull().sum()
✔️ 널값 제거
# 특정 개수 이상의 널값이 있는 열 삭제
df = df.dropna(axis = 1, thresh = 300)
## 300개 이상의 널값이 있는 열 삭제됨
# 널값이 있는 행 삭제
# any = 널 값이 하나라도 있으면 삭제
df.dropna(subset = 'age', how = 'any') # age 열에서 널 값이 하나라도 있으면 삭제
# = df.dropna(subset = 'age', how = 'any', axis = 0)
✔️ 널값 대체 : fillna
- 평균
# 평균으로 대체
age_mean = df['age'].mean()
df['age'] = df['age'] .fillna(age_mean)
# df['age'] .fillna(age_mean, inplace = True)
- 최빈값
# 널값을 직접 찾아서 확인
df[df['embark_town'].isnull() == True]
# 최빈값 가져오기
town_mode = df['embark_town'].value_counts().idxmax()
# 최빈값으로 대체
df['embark_town'].fillna(town_mode, inplace = True)
- 주변값
# 앞에 있는 값으로 대체
df['embarked'].fillna(method = 'ffill')[826:831]
# 뒤에 있는 값으로 대체
df['embarked'].fillna(method = 'bfill')[826:831]
✔️ 중복 데이터 : duplicated
# 중복 데이터 확인
print(df)
print(df.duplicated()) # True가 중복이라는 의미
# 중복 데이터 제거
print(df)
print(df.drop_duplicates())
✔️ 데이터 표준화
# 연비 mpg = mile per gallon
# kpl =kilometer per liter
# 1 mpg = 0.425 kpl
kpl = 0.425
df['kpl'] = df['mpg'] * kpl
df['kpl'] = df['kpl'].round(1)
'Python' 카테고리의 다른 글
[Python][한국복지패널데이터] 주제 1_성별에 따른 월급 차이 (0) | 2023.06.08 |
---|---|
[Python] 데이터 전처리 (0) | 2023.06.04 |
[python] 데이터 시각화 (0) | 2023.06.01 |
[Python] raw string (0) | 2023.05.18 |
[파이썬] 날짜 관련 함수 (0) | 2023.04.15 |