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

김치현님의 프로필 이미지
김치현

작성한 질문수

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

모델링 및 평가(분류)

Encoders require their input argument must be uniformly strings or numbers. Got ['int', 'str'] 라는 오류가 떴습니다.

작성

·

21

0

보니깐 int와 str이 혼합되어서 뜬것 같은데..

cols = X_train.select_dtypes(include = 'object').columns print(list) from sklearn.preprocessing import LabelEncoder cols = X_train.select_dtypes(include = 'object').columns le = LabelEncoder() for col in cols : le = LabelEncoder() X_train[col] = le.fit_transform(X_train[col]) X_test[col] = le.transform(X_test[col])

 

그래서 이렇게 cols라는 코드를 사전에 지정해줬는데... 왜 뜰까요?

처음부터 숫자와 str 데이터를 분리해서 인코딩 했어야 할까요?

답변 3

0

김치현님의 프로필 이미지
김치현
질문자

 

print(cols)는

class 'list'> Index(['workclass', 'education', 'marital.status', 'occupation', 'relationship', 'race', 'sex', 'native.country'], dtype='object')

이렇게 나왔구요.

 

X_train.head()는 아래와 같습니다..

image.png

 

0

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

어떤 데이터에서 이런상황이 나왔을까요?
X_trrain.head()와 cols를 print()해서 보여주실 수 있을까요?

김치현님의 프로필 이미지
김치현
질문자

  • print(cols)는

    class 'list'> Index(['workclass', 'education', 'marital.status', 'occupation', 'relationship', 'race', 'sex', 'native.country'], dtype='object')

    이렇게 나왔구요.

     

    X_train.head()는 아래와 같습니다..

    image.png

     

    답글 달기

    수정

    삭제

    •  

    •  


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

큰 문제 없어보이는데 다시 실행해도 에러가 나올까요?

만약 시험에서 이런 상황이라면 컬럼 1개씩 인코딩하고

에러가 나는 컬럼은 제거하거나 아래와같이 str로 변환하겠습니다.

X_train[col] = X_train[col].astype(str)
X_test[col] = X_test[col].astype(str)

0

안녕하세요, 인프런 AI 인턴입니다. 김치현님, 질문 주셔서 감사합니다.

현재 겪고 계신 TypeError: Encoders require their input argument must be uniformly strings or numbers. Got [‘int’, ‘str’] 오류는 데이터의 컬럼에 서로 다른 타입(int와 str)이 혼합되어 있을 때 발생합니다. LabelEncoder는 입력 값들이 모두 문자열이거나 모두 숫자여야 합니다.

문제를 해결하기 위해서는 다음과 같은 방법을 사용할 수 있습니다:

  1. 데이터 타입 확인 및 변환: 먼저, 데이터를 전처리하여 object 타입 컬럼 중에서 int나 float로 변환할 수 있는 것은 미리 변환합니다. 예를 들어, 특정 열이 사실 숫자를 나타낸다면 astype(int) 혹은 astype(float) 로 변환하시기 바랍니다.
   for col in cols:
       if X_train[col].apply(lambda x: isinstance(x, (int, float))).all():
           X_train[col] = X_train[col].astype(str)
           X_test[col] = X_test[col].astype(str)
  1. NaN 처리: 결측치는 encoding 시 문제가 될 수 있으므로 fillna()를 사용해 NaN 값을 다른 값으로 대체합니다.

  2. 데이터 타입 확인: select_dtypes() 사용 후 실제로 선택된 컬럼이 의도한 컬럼인지를 출력하여 확인해봅니다.

  3. 스칼라 사용 고려: 데이터가 비슷한 형태라도 완전히 일치하지 않는 경우가 많아 LabelEncoder 대신 pd.get_dummies()를 사용하여 가변수화(dummy variable) 해볼 수 있습니다.

위 방법을 사용하여 데이터의 타입을 맞춰주시면 오류를 해결할 수 있을 것입니다. 추가적인 사항이나 개선이 필요하다면 더 문의하세요.

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

김치현님의 프로필 이미지
김치현

작성한 질문수

질문하기