원핫인코딩 후 컬럼 개수 불일
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요
먼저 유사한 질문이 있었는지 검색해보세요
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
안녕하세요, 인프런 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('총가스사용량')를 사용하여 해당 컬럼을 제대로 제거하고 반환해야 합니다.
위의 내용을 바탕으로 다음과 같은 유사한 문제를 해결한 정보를 참고하실 수 있습니다:
이 링크들에서는 데이터 병합, 원핫 인코딩, 모델 학습과 예측의 전반적인 과정에서 발생할 수 있는 문제들과 해결 방안을 다루고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
뒤로가기 버튼 같은 것이 있나요?
0
27
1
강의 연장 문의
0
31
1
출력값 질문
0
31
2
수업노트가 어디에 있나요?
0
29
1
실기시험 제출관련
0
160
2
6.20 작업형 2 과적합
0
169
3
코딩팡 장업형2 베이스 라인 인코딩 종류 질문
0
52
2
로지스틱회귀, 회귀
0
52
2
회귀 문제를 풀때 질문입니다.
0
59
1
불균형 처리 후 성능이 더 낮아졌다면,
0
66
2
실기 체험 제2유형 에러 문의
0
66
1
LIGHTGBM 으로 하면 pred값이 소수점 6자리까지 나오는게 맞나요
0
52
2
3번문제 등분산 가정
0
50
2
작업형3 target 형 변환 질문
0
38
2
[작업형1] 연습문제 섹션1 ~ 10 의 section4
0
40
3
원핫인코딩과 레이블 인코딩에서 concat
0
62
2
제2유형 질문입니다.
0
49
2
C()
0
44
2
작업형 2에서 strafity 적용 유무
0
53
2
수강 기간 연장 가능 여부 문의드립니다.
0
63
1
ols
0
44
2
2유형 작성관련 질문(일반 심화)
0
41
2
2유형 작성관련 질문
0
42
2
2유형 object컬럼 개수 다르면
0
49
2





