인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

wsyang님의 프로필 이미지
wsyang

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

3회 기출유형(작업형2)

로버스트 스케일러 문의

해결된 질문

작성

·

42

0

from sklearn.preprocessing import RobustScaler

cols = ['Age','AnnualIncome', 'FamilyMembers',  'ChronicDiseases',]

for col in cols:
  scaler = RobustScaler()
  train[col] = scaler.fit_transform(train[col])
  test[col] = scaler.fit_transform(test[col])

train
ValueError: Expected a 2-dimensional container but got <class 'pandas.core.series.Series'> instead. Pass a DataFrame containing a single row (i.e. single sample) or a single column (i.e. single feature) instead.

로버스트 스케일러를

라벨인코딩처럼 for 문으로 사용안되는 것인가요?

에러가 발생하네요

 

 

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

정말 열심히 공부하고 계시네요!! 응원합니다.

위 에러는 반복문 때문에 발생한 에러는 아니에요

3가지 문제가 있어요!

 

1 train에는 fit_transform, test에는 transform만 적용 필요

2 데이터프레임 형태로 입력되어야 합니다. (아래 에러는 그 에러 입니다.)

scaler.fit_transform(train[[col]])

또는

scaler.fit_transform(train[cols])

 

그리고 하나 더 !!!

라벨인코딩 -> 반복문 필요

스케일링 -> 반복문 필요 없음 / 한번에 여러 컬럼 스케일링 가능

반복문 없이 아래와 같이 사용하면 됩니다.

scaler.fit_transform(train[cols])

0

안녕하세요, 인프런 AI 인턴입니다.

wsyang님께서 문의하신 RobustScaler 사용 시 발생하는 오류에 대해 설명드리겠습니다. RobustScaler는 입력 데이터로 2차원 배열을 요구합니다. 하지만 현재 코드에서 train[col]을 사용하면 해당 컬럼이 Pandas의 시리즈 형태(1차원 배열)로 전달되기 때문에 오류가 발생합니다.

이 문제를 해결하기 위해서는 컬럼을 데이터프레임 형식으로 전달해야 합니다. 즉, 대괄호 []를 추가하여 컬럼을 선택함으로써 2차원 배열로 변환할 수 있습니다. 다음과 같이 코드를 수정해 보세요:

from sklearn.preprocessing import RobustScaler

cols = ['Age', 'AnnualIncome', 'FamilyMembers', 'ChronicDiseases']

for col in cols:
    scaler = RobustScaler()
    train[[col]] = scaler.fit_transform(train[[col]])  # 2차원 배열로 변환
    test[[col]] = scaler.transform(test[[col]])  # 2차원 배열로 변환

위 코드에서는 train[[col]]와 같이 대괄호 두 개를 사용하여 시리즈 대신 데이터프레임 형태로 입력을 전달합니다. 이렇게 하면 RobustScaler가 정상적으로 작동할 것입니다.

관련하여 아래 링크에서 비슷한 상황 및 해결 방법에 대한 설명을 참고하실 수 있습니다:
- 작업형2 모의문제1에서는 스케일러가 2차원 배열 형식의 데이터를 요구하는 원리에 대해 다룹니다.

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

wsyang님의 프로필 이미지
wsyang

작성한 질문수

질문하기