예제로 익히는 Python - 4, 5

김주호·2024년 10월 31일

01. 이상치, 결측치란?

정상범위를 벗어나는 데이터와, 누락된 데이터!

이상치, 결측치 처리는 반드시 진행해야 합니다!

  • 이상치: 전체 데이터 범위에서 벗어난 아주 작은 값이나 큰 값을 말해요.
  • 결측치: 데이터 수집 과정에서 측정되지 않거나 누락된 데이터를 말해요.

결측치 처리 - 제거

  • 결측치가 존재하는 행 또는 열을 제거합니다.
#컬럼별 결측치 식별 
df3.isnull().sum()

#결측치 제거1 - 열 제거하기 
df3 = df3.drop('Unnamed: 4', axis=1)

#결측치 제거2 - 결측치가 있는 행들은 모두 제거
df3.dropna()
#같은 표현
df3.dropna(axis=0, how='any')

#결측치 제거3 - 결측치가 있는 열을 모두 제거 
#열로 제거하면 컬럼이 제거되는 현상이 발생하므로 매우 위험합니다.  
#df3.dropna(axis=1)

#결측치 제거4 - 전체 행이 결측값인 경우만 삭제하고 싶은 경우
#how='all'을 사용해줍니다. 
df3 = df3.dropna(how='all')

#결측치 제거5 - 결측치 제거 후 결과를 바로 저장하고 싶을 때
#inplace=True 조건을 넣어줍니다. 
df3.dropna(inplace=True)

#drop 이후 결측치가 잘 제거되었는지 체크가 필요하겠죠? 
df3.isnull().sum()
  • 결측치 처리 - 대체
    • 최빈값: 범주형 변수에 주로 사용됩니다. ****데이터가 가장 많이 도출된 값으로 대체해 줄 수 있습니다.
    • 중앙값, 평균값: 수치형 변수에 주로 사용합니다. 결측치에 평균값이나 중앙값을 넣어줍니다.
  • 그 외에 행 기준으로 바로 위나 아래의 값을, 또는 group by 연산의 결과로 대체할 수 있습니다.
#결측치 대체: 최빈값
#mode 는 최빈값을 의미
#df3 의 Interaction type 컬럼을 fillna함수를 이용하여 채워주되, mode() 함수를 사용하여 최빈값으로 넣어줌
#mode 함수는 시리즈를 output으로 가집니다. 
#따라서,[0]을 통해 시리즈 중 단일값을 가져와야 합니다. 
df3 = df3['Interaction type'].fillna(df3['Interaction type'].mode()[0])

#결측치 대체: 평균값
df['sw'] = df['sw'].fillna(df['sw'].mean())
df.isnull().sum()

#결측치 대체: 중간값
#inplace=True 로 하면 원본 데이터가 바뀌게 됩니다.
df['sw'] = df['sw'].fillna(df['sw'].median())
df.isnull().sum()

#결측치 대체: 바로 위 값으로 대체
df['sw'] = df['sw'].fillna(method='ffill')
df.isnull().sum()

#결측치 대체: 바로 아래 값으로 대체
df['sw'] = df['sw'].fillna(method='bfill')
#df.isnull().sum()

#결측치 대체: group by 값으로 대체
#사전 데이터 확인
df.groupby('Is Amazon Seller')['sw'].median()

#group by한 데이터를 데이터프레임의 컬럼으로 추가하기 위해 
#transform 함수 사용
df['sw'] = df['sw'].fillna(df.groupby('Is Amazon Seller')['sw'].transform('median'))
df.isnull().sum()

df['sw'].fillna(df.groupby(기준컬럼)[계산할 컬럼].transform(계산방식))

02. 이상치 파헤쳐보기

0개의 댓글