강의

멘토링

커뮤니티

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

sonysame님의 프로필 이미지
sonysame

작성한 질문수

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

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

get_dummies()의 널값 처리

작성

·

336

1

357-8쪽 해당 실습에서

object형을 제외한 int 타입에 대해서 fillna 메서드를 활용해서 Null 칼럼을 평균값으로 대체 하였습니다.

null_column_count=house_df.isnull().sum()[house_df.isnull().sum()>0]

house_df.dtypes[null_column_count.index]

MasVnrType      object
BsmtQual        object
BsmtCond        object
BsmtExposure    object
BsmtFinType1    object
BsmtFinType2    object
Electrical      object
GarageType      object
GarageFinish    object
GarageQual      object
GarageCond      object
dtype: object

그래서 다음과 같이 12개의 feature에서만 null값이 남게 되었는데요, 358쪽에서 get_dummies()는 자동으로 문자열 피처를 원-핫 인코딩 변환하면서 NUll 값은 'None'칼럼으로 대체해준다고 하였습니다.
None칼럼으로 대체해주면 인코딩 이후 None으로 끝나는 칼럼의 갯수가 12개가 나와야 하는데,

house_df_ohe=pd.get_dummies(house_df)
for i in house_df_ohe: if "None" in i: print(i)

을 하면, MasVnrType_None으로 한개밖에 나오지 않습니다. 왜 나머지는 나오지 않는지 궁금합니다!

예를 들어, house_df에서 BsmtQual은 17번째 row에서 nan 값인데, house_df_ohe에서 BsmtQual_None이라는 칼럼명이 없으며,

BsmtQual로 시작하는 칼럼명은 다음과 같이 4개(
'BsmtQual_Ex','BsmtQual_Fa','BsmtQual_Gd','BsmtQual_TA') 밖에 없고,

house_df_ohe[['BsmtQual_Ex','BsmtQual_Fa','BsmtQual_Gd','BsmtQual_TA']].iloc[17]을 해보면

BsmtQual_Ex 0 BsmtQual_Fa 0 BsmtQual_Gd 0 BsmtQual_TA 0 모두 0이 나옵니다. 여기 nan값은 인코딩 후 어떻게 되는건가요? 따로 칼럼이 만들어지지 않는건가요?

 

답변 1

2

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

해당 부분은 판다스 버전업이 되어서 변경된건지, 아님 제가 잘못 기술한 건지 잘 모르겠습니다.

현재 버전으로는 DataFrame.get_dummies(dummy_na=True)를 사용해야 Null 컬럼값을 만듭니다. ( default는 dummy_na=False 입니다)

house_df_ohe=pd.get_dummies(house_df, dummy_na=True)
for i in house_df_ohe:
    if 'nan' in i:
        print(i)

좋은 정보 감사합니다. 나중에 책/강의 개정시 반영하겠습니다.

강사님 안녕하세요! 저도 이 질문 관련하여 궁금증이 생겨 코드를 수행해보았습니다.

house_df_ohe=pd.get_dummies(house_df, dummy_na=True)

이렇게 코드를 수행할 경우 모든 문자타입 컬럼에 'None' 컬럼이 생성되는 것 같습니다.

house_df_ohe.shape >> (1460, 309)

* dummy_na=False 에서 컬럼은 271개이므로  38개가 더 생겼습니다. (원래 43개 문자타입 컬럼이 있으나 5개는 drop한 상태)

 

이렇게 된다면 컬럼이 너무 많이 생기는 것 같습니다. dummy_na=False로 진행해도 nan값이 반영된다고 볼 수 있지 않을까요?

* nan 값일 경우 특정컬럼에서 모두 '0' 으로 반영

 

 

 

 

sonysame님의 프로필 이미지
sonysame

작성한 질문수

질문하기