취뽀 기록

#열심히 살자 #취업 #공부

Python/[개념 및 문법]

[Pandas] 데이터 전처리(널값 확인 및 대체, 중복 데이터, 표준화)

hyunnn_00 2023. 6. 19. 00:23

일단 라이브러리를 불러오자

# 라이브러리 불러오기
import pandas as pd
import seaborn as sns

# 널값 확인

# = 비어 있는 데이터(값) = 누락 데이터
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)

 

 

 

# 널값 개수 확인

# 널값 개수 합 = 열 단위로 계산하는 것이 기본
df.isnull().sum()

 

 

# 널값 제거 

# 특정 개수 이상의 널값이 있는 열 삭제
df = df.dropna(axis = 1, thresh = 300)
# 널값이 있는 행 삭제
# any = 행 기준으로 널값이 하나라도 있으면 삭제
df.dropna(subset = 'age', how = 'any')
# = df.dropna(subset = 'age', how = 'any', axis = 0)

# all = 행 기준으로 모두 널값이면 삭제
# df.dropna(subset = 'age', how = 'all')

 

# 널값 대체

age 변수의 널값을 age의 평균으로 대체해보자

# 평균으로 대체
age_mean = df['age'].mean()

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]

 

# 중복 데이터

# 중복 데이터 만들기
df = pd.DataFrame({'c1': ['a','a','b','a','b'],
                   'c2': [1,1,1,2,2],
                   'c3': [1,1,2,2,2]})
                   
# 중복 데이터 확인
print(df['c1'])
print(df['c1'].duplicated()) # True 가 중복이라는 의미

# 중복 데이터 제거
print(df['c1'])
print(df['c1'].drop_duplicates())

# 중복 데이터 확인
print(df)
print(df.duplicated()) # True 가 중복이라는 의미

# 중복 데이터 제거
print(df)
print(df.drop_duplicates())

# 중복 데이터 제거
print(df[['c2','c3']])
print(df[['c2','c3']].drop_duplicates()) # 부분집합으로 제거
print(df.drop_duplicates(subset = ['c2','c3'])) # 전체집합을 유지 & 특정열 중복 데이터 제거