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

피카라이언님의 프로필 이미지
피카라이언

작성한 질문수

실전 데이터 사이언스 Part2. 데이터 전처리

스케일링

6:14초 dataframe 스케일링한 후 컬럼 추가에 대한 질문

작성

·

629

0

안녕하세요.

주피터노트북으로 따라하던 도중 에러가 났는데 어떻게 고칠줄 몰라 여쭈어봅니다.

37줄을 프린트하면 Key error가 납니다.

# 키, 몸무게 데이터를 각각 표준 스케일링한 후 컬럼에 추가

df = df_raw.copy() # 백업 데이터 사용 (결측치 없는)

df[:10]

from sklearn.preprocessing import StandardScaler

scale = StandardScaler() #make constructor - 하나의 객체를 만들었다. 

df["h_sc","w_sc"] = scale.fit_transform(df["height","weight"])

df[:5]

KeyError: "None of [Index(['h_sc', 'w_sc'], dtype='object')] are in the [columns]" 

이런 에러가 뜨는데 해결방법을 알 수 있을까여??

답변 1

0

김화종님의 프로필 이미지
김화종
지식공유자

안녕하세요. 위의 코드는 정상으로 동작해야 하나 간혹 파이썬 버전에 따라 오류가 나기도 합니다.

코드의 동작을 설명드리면, 아래의 부분은 (1000, 2) 크기의 어레이(ndarray)를 얻습니다 (스케일링 결과치).

scale.fit_transform(df["height","weight"])

아래 코드는 df에 ['h_sc','w_sc'] 라는 이름의 컬럼을 두개 새로 만들면서 위에서 얻은 (1000,2) 어레이로 내용을 채우라는 뜻입니다.

df[['h_sc','w_sc']]= ...

현재 발생하는 오류 메시지는 ['h_sc','w_sc'] 라는 컬럼명이 미리 존재하지 않았다는 것입니다.

원래 새로운 이름의 컬럼이 두개 추가가 되어야 하나, 한번에 한 컬럼만 추가되는 경우도 있습니다.

아래와 같이 한번에 한 컬럼씩 스케일링해 보세요.

df[['h_sc']]=scale.fit_transform(df[['height']])

df[['w_sc']]=scale.fit_transform(df[['weight']])

동작하지 않으면 다시 질문 바랍니다.

안녕하세요 선생님.

df[['h_sc']]=scale.fit_transform(df[['height']])

df[['w_sc']]=scale.fit_transform(df[['weight']])

이렇게 할 때도 값이 다 안들어가거나 key error뜨더군요... 어떤 방식으로 동작한지는 알았습니다.

그래서 저는 

df["h_sc"] = [1]*df.shape[0]

df["w_sc"] = [1]*df.shape[0]

 

df[["h_sc","w_sc"]] = scale.fit_transform(df[["height","weight"]])

df[:5]

이렇게해서 그냥 무작위 값 집어넣고 그위로 height and weight transform값한것을 넣었는데 작동은 된다만 이론상 맞을까요??

김화종님의 프로필 이미지
김화종
지식공유자

위처럼 해도 됩니다. 내용을 다 이해하셨네요~ 혹시 아래와 같이 인덱스를 리스트로 주지 말고 한 변수씩 주어 보세요 ([...] 가 빠짐).

df['h_sc']=scale.fit_transform(df['height'])

df['w_sc']=scale.fit_transform(df['weight'])

피카라이언님의 프로필 이미지
피카라이언

작성한 질문수

질문하기