[Python][Pandas] 결측값, 중복값 처리 [isnull(), notnull(), dropna(), fillna(), reset_index(), duplicated(), drop_duplicates()]

도도요닝·2022년 8월 15일
0

python

목록 보기
5/12

결측값 처리

  • 결측값 : 자료에 누락된 값
  • 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('결측값을 대체할 값')
#해당하는 컬럼에 존재하는 결측값을 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')

0개의 댓글