해결된 질문
작성
·
18
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차원 배열 형식의 데이터를 요구하는 원리에 대해 다룹니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.