결측치를 채우는 전처리는 해보았는데, null값이 없는 컬럼의 이상치를 그룹 내 최빈값으로 대체하는 과정은 처음이었다.
많이 쓸 것 같아서 기억하려고 가져왔다.
df['연간 소득'] = df['연간 소득'].str.replace('_', '') df['연간 소득'] = df['연간 소득'].astype(float) df['연간 소득'] = df['연간 소득'].astype(int)
[연간 소득] 컬럼이 object형이고, '_'가 들어가 있는 이상값이 있어서 언더바를 삭제한 후, int형으로 변환해주었다.
from scipy.stats import mode
df['최빈값'] = df.groupby('고객번호')['연간 소득'].transform(lambda x: mode(x)[0])
최빈값을 구하는 함수인 mode()를 쓰기 위해선 scipy.stats 라이브러리에서 mode를 import해주어야 한다.
mode(x) 뒤에 [0]는 최빈값이 여러개인 경우, 리스트를 반환하기 때문이다.
[고객번호] 컬럼으로 그룹화 한 후, 각 그룹별 [연간 소득]의 최빈값을 구해 [최빈값] 컬럼에 저장해주었다.
df['연간 소득'] = df['최빈값']
df.drop(columns=['최빈값'], inplace=True)
[최빈값] 컬럼의 값을 [연간 소득] 컬럼으로 옮겨준 후, [최빈값] 컬럼을 삭제해주었다.
튀는 이상치 없이 해결된 모습.
^ㅁ^