해결된 질문
작성
·
657
0
안녕하세요?
아래와 같이 LabelEncoder를 실행하면
'ValueError: y should be a 1d array, got an array of shape (1818, 10) instead.라는 error가 발생합니다. '
왜 그럴까요? df2라는 데이터프레임에서 object인 column만 선택해서 똑같이 했습니다. 어떻게 해야 하는지 알려주시면 대단히 감사하겠습니다.
from sklearn.preprocessing import LabelEncoder
cols=['Gender', 'family_history_with_overweight', 'FAVC', 'CAEC', 'SMOKE',
'SCC', 'CALC', 'MTRANS', 'NObeyesdad', 'transportation']
le=LabelEncoder()
for col in [cols]:
df2[col]=le.fit_transform(df2[col])
답변 3
1
1
안녕하세요, 인프런 AI 인턴입니다.
Kyewon(은서.후.채)님, LabelEncoder
사용 시 발생하는 에러는 LabelEncoder
가 각 특정 열(column)의 데이터를 레이블 인코딩할 때 그 열이 1차원 배열로 제공되어야 하는데, 대신 2차원 배열(즉, 여러 열이 함께 제공됨)이 주어졌을 때 일어납니다.
아래의 코드 부분에서 문제가 발생한 것으로 보입니다:
for col in [cols]:
df2[col]=le.fit_transform(df2[col])
위 코드에서 for col in [cols]:
부분이 문제의 원인입니다. 이렇게 작성할 경우, cols
리스트 전체를 하나의 원소로 가지는 새로운 리스트를 만들어 반복하게 됩니다. 에러 메시지에 나타나는 것처럼 cols
리스트에 있는 모든 열을 한 번에 인코딩하려고 하기 때문에 문제가 발생합니다.
해결 방법은 매우 간단합니다. for
반복문을 적절하게 사용하여 각 열을 개별적으로 인코딩하도록 수정해야 합니다. 아래와 같이 수정하면 됩니다:
le = LabelEncoder()
for col in cols:
df2[col] = le.fit_transform(df2[col])
여기서 cols
는 변환하고자 하는 열의 이름 목록을 포함하며, for col in cols:
반복문은 이 목록의 각 열에 대해 LabelEncoder
를 적용합니다.
제가 참고한 답변 링크는 다음과 같습니다:
- 작업형 2번 라벨인코딩 질문
- 작업형2 모의문제2 라벨인코딩 과정 중 에러
질문자님께서는 열을 개별적으로 라벨 인코딩할 때 for
반복문을 올바르게 사용하여 각 열을 차례대로 변환하시면 됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
0
답을 찾으셨군요!!
그래도 혹시 모르니 피드백을 드리면
흔히 하는 실수 중 하나입니다. 사이킷런의 레이블 인코딩에서 입력값은
시리즈가 아닌 데이터프레임 형태여야 합니다.
df에서 1개의 컬럼을 선택할 때 df['컬럼명']로 사용하면 시리즈형태입니다.
이를 데이터프레임으로 사용할 때는 여러가지 방법이 있지만 가장 쉬운 방법은 df[['컬럼명']]입니다.
대괄호가 두개라서 헷갈릴 수 있지만 아래와 같은 코드입니다.
cols = ['컬럼명']
df[cols]