작성
·
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()는 아래와 같습니다..
0
안녕하세요, 인프런 AI 인턴입니다. 김치현님, 질문 주셔서 감사합니다.
현재 겪고 계신 TypeError: Encoders require their input argument must be uniformly strings or numbers. Got [‘int’, ‘str’]
오류는 데이터의 컬럼에 서로 다른 타입(int와 str)이 혼합되어 있을 때 발생합니다. LabelEncoder
는 입력 값들이 모두 문자열이거나 모두 숫자여야 합니다.
문제를 해결하기 위해서는 다음과 같은 방법을 사용할 수 있습니다:
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)
NaN 처리: 결측치는 encoding 시 문제가 될 수 있으므로 fillna()
를 사용해 NaN 값을 다른 값으로 대체합니다.
데이터 타입 확인: select_dtypes()
사용 후 실제로 선택된 컬럼이 의도한 컬럼인지를 출력하여 확인해봅니다.
스칼라 사용 고려: 데이터가 비슷한 형태라도 완전히 일치하지 않는 경우가 많아 LabelEncoder
대신 pd.get_dummies()
를 사용하여 가변수화(dummy variable) 해볼 수 있습니다.
위 방법을 사용하여 데이터의 타입을 맞춰주시면 오류를 해결할 수 있을 것입니다. 추가적인 사항이나 개선이 필요하다면 더 문의하세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
print(cols)는
class 'list'> Index(['workclass', 'education', 'marital.status', 'occupation', 'relationship', 'race', 'sex', 'native.country'], dtype='object')
이렇게 나왔구요.
X_train.head()는 아래와 같습니다..
답글 달기
수정
삭제