작성
·
163
0
선생님 안녕하세요! 5장 회귀 실습 2:캐글경연 주택가격 예측-Advanced Regression Techniques - 01 을 듣다가 타겟 값인 Price를 로그 변환하여 정규 분포 형태로 변환하고, 피처들 중 숫자형 컬럼의 Null 값 데이터 처리 부분 코드를 다음과 같이 썼습니다. 그런데 결과가 사진과 같이 float64가 포함된 형태로 나왔습니다. 제가 어떤 부분에서 잘못한 건지, 그리고 어떻게 해야 선생님과 같은 결과가 나올 수 있나요?ㅎㅎ
# SalePrice 로그 변환
original_SalePrice = house_df['SalePrice']
house_df['SalePrice'] = np.log1p(house_df['SalePrice'])
# Null이 너무 많은 컬럼들과 불필요한 컬럼 삭제
house_df.drop(['Id', 'PoolQC', 'MiscFeature', 'Alley', 'Fence', 'FireplaceQu'], axis=1, inplace=True)
# Drop하지 않는 숫자형 Null 컬럼들은 평균 값으로 대체
num_columns = house_df.dtypes[house_df.dtypes !='object'].index.to_list()
house_df[num_columns].fillna(house_df[num_columns].mean(), inplace=True)
# Null 값이 있는 피처명과 타입을 추출
null_column_count = house_df.isnull().sum()[house_df.isnull().sum() > 0]
print('## Null 피처의 Type :\n', house_df.dtypes[null_column_count.index])
답변 1
0
안녕하십니까,
이건 저도 이유를 잘 모르겠습니다만,
house_df[num_columns].fillna(house_df[num_columns].mean(), inplace=True)
가 먹히질 않는 군요. house_df[num_columns] 에 inplace 가 바로 적용되지 않고 있습니다.
좀 더 파고 들어야 할 것 같은데, house_df[num_columns].fillna(house_df[num_columns].mean(), inplace=True) 같은 형태가 inplace로 바로 적용이 않되는 것 같습니다.
감사합니다.
# 아래 2줄의 코드에서는 int타입만 처리가 되어서
num_columns = house_df.dtypes[house_df.dtypes != 'object'].index.to_list()
house_df[num_columns].fillna(house_df[num_columns].mean(),inplace=True)
#아래와 같이 float타입 처리를 위한 코드를 추가해서 처리해서 해결해 보았습니다.
from sklearn.impute import SimpleImputer
float_cols = house_df.select_dtypes(include='float64').columns
# 결측치를 평균값으로 대체하기 위한 Imputer 생성
imputer = SimpleImputer(strategy='mean')
# float64 타입 열에 대해서만 Imputer 적용
house_df[float_cols] = imputer.fit_transform(house_df[float_cols])