인프런 커뮤니티 질문&답변
원핫인코딩 후 컬럼 개수 불일
해결된 질문
작성
·
35
0
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요
먼저 유사한 질문이 있었는지 검색해보세요
print(train.info()) print(test.info()) print(train.isnull().sum()) print(test.isnull().sum()) print(train.head()) print(test.head()) target = train['총가스사용량'].pop # import sklearn # print(sklearn.__all__) print(train.shape, test.shape) train = pd.get_dummies(train) test = pd.get_dummies(test) print(train.shape, test.shape)상기 처럼 코딩 후,
컬럼값이 26, 25로 불일치하게 나와요. 왜일까요...
(3196, 6) (1476, 5) (3196, 26) (1476, 25)
그래서 그 이후 값들도 에러가 떠요
from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state = 0)---------------------------------------------------------------------------TypeError Traceback (most recent call last)/tmp/ipython-input-3028840780.py in <cell line: 0>() 1 from sklearn.model_selection import train_test_split 2 ----> 3 X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state = 0)4 frames
/usr/local/lib/python3.12/dist-packages/sklearn/utils/validation.py in _num_samples(x) 397 if hasattr(x, "shape") and x.shape is not None: 398 if len(x.shape) == 0: --> 399 raise TypeError( 400 "Input should have at least 1 dimension i.e. satisfy " 401 f"`len(x.shape) > 0`, got scalar `{x!r}` instead."TypeError: Input should have at least 1 dimension i.e. satisfy `len(x.shape) > 0`, got scalar `array(<bound method Series.pop of 0 9077.8 1 10105.5 2 8603.6 3 11076.8 4 10781.4 ... 3191 12294.7 3192 10410.7 3193 10473.8 3194 9657.9 3195 9961.5 Name: 총가스사용량, Length: 3196, dtype: float64>, dtype=object)` instead.
답변 3
0
0
0
안녕하세요, 인프런 AI 인턴입니다. 지은님.
원핫 인코딩 후 컬럼 개수가 불일치하게 나오는 이유와 TypeError가 발생하는 이유에 대해 설명드리겠습니다.
원핫 인코딩 컬럼 불일치:
- 원핫 인코딩을 수행하면, train과 test 데이터셋에서 서로 다른 카테고리가 존재할 경우 서로 다른 컬럼들이 생길 수 있습니다. 예를 들어, train에는 있지만 test에는 없는 특정한 카테고리가 존재할 경우, test 데이터셋에는 해당 카테고리에 대한 원핫 컬럼이 생성되지 않기 때문입니다.
- 이를 방지하기 위해서는 보통 train과 test를 먼저
pd.concat()으로 결합한 후 원핫 인코딩을 수행하고, 다시 원래 형태로 분리하는 방식이 일반적으로 사용됩니다. 이는 train과 test의 모든 카테고리 정보를 동일하게 인코딩할 수 있게 합니다.
- 원핫 인코딩을 수행하면, train과 test 데이터셋에서 서로 다른 카테고리가 존재할 경우 서로 다른 컬럼들이 생길 수 있습니다. 예를 들어, train에는 있지만 test에는 없는 특정한 카테고리가 존재할 경우, test 데이터셋에는 해당 카테고리에 대한 원핫 컬럼이 생성되지 않기 때문입니다.
TypeError 문제:
target = train['총가스사용량'].pop에서pop()메서드는 리스트에서 요소를 제거하고 반환하는 메서드지만, 여기서는 괄호가 없어 메서드 자체를 할당하고 있습니다. 따라서target = train.pop('총가스사용량')와 같이 사용해야 합니다.
- 또한,
train_test_split에서의 TypeError는target변수의 데이터 형태가 잘못되어 발생하는 것으로 보입니다.train.pop('총가스사용량')를 사용하여 해당 컬럼을 제대로 제거하고 반환해야 합니다.
위의 내용을 바탕으로 다음과 같은 유사한 문제를 해결한 정보를 참고하실 수 있습니다:
이 링크들에서는 데이터 병합, 원핫 인코딩, 모델 학습과 예측의 전반적인 과정에서 발생할 수 있는 문제들과 해결 방안을 다루고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





