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

Kyewon(은서.후.채)님의 프로필 이미지
Kyewon(은서.후.채)

작성한 질문수

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

피처 엔지니어링

LabelEncoder를 실행하면 'ValueError: y should be a 1d array, got an array of shape (1818, 10) instead.라는 error가 발생합니다.

해결된 질문

작성

·

703

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]

 

Kyewon(은서.후.채)님의 프로필 이미지
Kyewon(은서.후.채)

작성한 질문수

질문하기