결측값 처리
- 결측값 : 자료에 누락된 값
- NaN, N/A, NULL, 0값 등 다양한 방식으로 존재
.replace('바꾸고 싶은 값','교체할 값')
#df에 존재하는 0값을 numpy에서 제공하는 결측값 NaN으로 교체
df = df.replace(0, np.NaN)
결측 데이터 확인 isnull() , notnull()
#결측값 = True로 존재함
df.isnull()
#isnull의 반대로 나타남
#결측값 = False로 존재함
df.notnull()
# 결측값 = True = 1
df.isnull().sum()
결측 데이터 제거dropna()
#결측인 값 존재하면 존재하는 행 모두 삭제
#결측값이 많은 경우 dropna사용을 자제함 => 다 사라지기 때문에
df.dropna()
#subset=['컬럼명'] 옵션 지정하면 해당 컬럼만 검사
#옵션을 넣어줌
#[컬럼] 결측값만 삭제하고 나머지는 결측값이 존재해도 삭제하지 않음
#[컬럼]이 존재하지 않을 때, 데이터 분석이 불가능 하다는 판단이 있는 경우 사용
#사용자 의사결정에 기반함
df.dropna(subset=['컬럼명'])
df.dropna(subset=['컬럼명1','컬럼명2']
결측 데이터 치환fillna()
#해당하는 컬럼에 존재하는 결측값을 fillna를 통해서 값을 채워줌
df['컬럼']=df['컬럼'].fillna('결측값을 대체할 값')
평균값으로 대체fillna('평균값')
#결측값 대체할 컬럼의 평균을 먼저 구해줌
#mean_column은 임의로 지정한 값임
#df['컬럼'].mean() => 평균값임
mean_column = df['컬럼'].mean()
df['컬럼']=df['컬럼'].fillna(mean_column)
최빈값으로 대체fillna('최빈값')
- value_counts() : 값을 세어주는 함수를 통해서 최빈값 알아냄
#해당 컬럼에 존재하는 값 중에서 최빈값을 숫자로 나타내 줌
df['컬럼'].value_counts()
#index형태로 바꿔줌
df['컬럼'].value_counts().index
#index에서 최빈값 추출
#0번째가 맨 앞 = 최빈값
df['컬럼'].value_counts().index[0]
df['컬럼'] = df['컬럼'].fillna(df['컬럼'].value_counts.index[0])
인덱스 재정렬 reset_index()
- 결측치 처리 과정에서, 데이터 프레임의 인덱스가 바뀌는 현상 발생
- reset_index() 인덱스 정렬
drop=True 옵션은 이전의 인덱스를 버린다는 의미
drop 안 하면 기존의 인덱스를 인식함
df = df.reset_index(drop=True)
중복값 처리
#임의로 중복값 생성
#마지막 값을 똑같이 중복시킨다는 의미
df = df.append(df.iloc[-1]).reset_index(drop=True)
중복데이터 탐색 duplicated()
#중복된 행 찾기
df[df.duplicated()]
#특정 열에서 중복 값 찾기 True False로 나타남
df['컬럼'].duplicated()
중복데이터 제거 drop_duplicates()
#기본적으로 '완벽히' 중복된 행을 제거
df.drop_duplicates()
#특정 열을 기준으로 제거
#keep = 'first'가 지정값
#['컬럼']을 기준으로 중복된 컬럼은 다 삭제 후, 맨 앞에 컬럼만 존재
df.drop_duplicates(subset=['컬럼'])
#특정 열을 기준으로 제거하는 데 마지막 값을 남김
df.drop_duplicates(subset=['컬럼'], keep='last')