강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

정아진님의 프로필 이미지
정아진

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

회귀 실습 2: 캐글경연 주택가격 예측 - Advanced Regression Techniques - 01

float64 null 값 처리 방법

해결된 질문

작성

·

59

0

코랩에서 house_df.fillna(house_df.mean(), inplace=True)를 실행하였는데 에러가 나서 커뮤니티를 보니

# object가 아닌 number 타입을 별도 리스트로 추출
num_columns=house_df.dtypes[house_df.dtypes!='object'].index.to_list()
# Drop 하지 않는 number 타입 컬럼들에 대해서 Null컬럼들은 평균값으로 대체
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])

이 코드를 실행하니 Null 피처의 Type 중에서 float64 컬럼들은 null값이 제대로 처리가 안된 걸 알 수 있었습니다. 어떻게 해결할 수 있을까요?

답변 2

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

Colab 환경의 Pandas 버전이 실습 버전과 달라서 그런것 같은데, 아래 코드가 float64일때 제대로 동작하지 않는 것 같습니다.

# object가 아닌 number 타입을 별도 리스트로 추출 num_columns=house_df.dtypes[house_df.dtypes!='object'].index.to_list() # Drop 하지 않는 number 타입 컬럼들에 대해서 Null컬럼들은 평균값으로 대체 house_df[num_columns].fillna(house_df[num_columns].mean(),inplace=True)

아래와 같이 코드를 변경해 보시지요.

num_columns = house_df.dtypes[house_df.dtypes != 'object'].index.to_list()

# number 타입 컬럼들에 대해서 Null컬럼들은 평균값으로 대체

for column in num_columns:

house_df[column].fillna(house_df[column].mean(),inplace=True)

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 정아진님.

float64 컬럼의 null 값 처리를 하시는 중에 발생한 이슈에 대해 알려주셔서 감사합니다.

현재 코드를 통해 object 타입이 아닌 숫자형(number) 타입의 컬럼들에 대한 null 값을 처리하고자 하신 점은 적절합니다. 그러나 일부 float64 타입 컬럼에서 null 값이 여전히 존재한다면, 이는 fillna가 해당 컬럼들에 제대로 적용되지 않았거나, inplace=True 옵션으로 인해 DataFrame이 업데이트되지 않는 경우가 발생할 수 있습니다.

이 문제를 해결하기 위해 아래 추가 방법을 시도해 보시기 바랍니다:

  1. 개별 컬럼에 적용: fillna을 각 float64 칼럼에 반복적으로 적용하여, 각 컬럼의 평균값으로 결측값을 대체하는 방법입니다.

    for column in num_columns:
        house_df[column] = house_df[column].fillna(house_df[column].mean())
    
  2. Sklearn의 SimpleImputer 사용: sklearn 라이브러리의 SimpleImputer를 활용하는 방법도 있습니다.

    from sklearn.impute import SimpleImputer
    
    
    imputer = SimpleImputer(strategy='mean')
    house_df[num_columns] = imputer.fit_transform(house_df[num_columns])
    

이를 통해 모든 float64 타입의 컬럼에서 null 값이 올바르게 평균으로 대체되었는지 확인하세요.

아래 원본 질문과 관련된 답변 링크들을 참고하시면, 비슷한 상황을 겪으신 분들의 문제 해결 사례를 볼 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

정아진님의 프로필 이미지
정아진

작성한 질문수

질문하기