일단 라이브러리를 불러오자
# 라이브러리 불러오기
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'])) # 전체집합을 유지 & 특정열 중복 데이터 제거
'Python > [개념 및 문법]' 카테고리의 다른 글
[python] 반복문에서의 continue (0) | 2023.06.20 |
---|---|
[판다스] 시계열 객체 변환, 시계열 데이터 만들기, 날짜 데이터 분리, 날짜 인덱싱 (0) | 2023.06.19 |
[python] 정규화(최대절대값 정규화, 최소값-최대값 정규화) (1) | 2023.06.19 |
[사이킷런] 더미변수 만들기, 라벨 인코딩, 원핫 인코딩 (0) | 2023.06.19 |
[Pandas] 데이터 구간별 범주화 pd.cut, pd.get_dummies (0) | 2023.06.19 |