강의

멘토링

로드맵

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

지은님의 프로필 이미지
지은

작성한 질문수

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

10회 기출유형(작업형2)

원핫인코딩 후 컬럼 개수 불일

해결된 질문

작성

·

21

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가 발생하는 이유에 대해 설명드리겠습니다.

  1. 원핫 인코딩 컬럼 불일치:

    • 원핫 인코딩을 수행하면, train과 test 데이터셋에서 서로 다른 카테고리가 존재할 경우 서로 다른 컬럼들이 생길 수 있습니다. 예를 들어, train에는 있지만 test에는 없는 특정한 카테고리가 존재할 경우, test 데이터셋에는 해당 카테고리에 대한 원핫 컬럼이 생성되지 않기 때문입니다.
    • 이를 방지하기 위해서는 보통 train과 test를 먼저 pd.concat()으로 결합한 후 원핫 인코딩을 수행하고, 다시 원래 형태로 분리하는 방식이 일반적으로 사용됩니다. 이는 train과 test의 모든 카테고리 정보를 동일하게 인코딩할 수 있게 합니다.
  2. TypeError 문제:

    • target = train['총가스사용량'].pop에서 pop() 메서드는 리스트에서 요소를 제거하고 반환하는 메서드지만, 여기서는 괄호가 없어 메서드 자체를 할당하고 있습니다. 따라서 target = train.pop('총가스사용량')와 같이 사용해야 합니다.
    • 또한, train_test_split에서의 TypeError는 target 변수의 데이터 형태가 잘못되어 발생하는 것으로 보입니다. train.pop('총가스사용량')를 사용하여 해당 컬럼을 제대로 제거하고 반환해야 합니다.

위의 내용을 바탕으로 다음과 같은 유사한 문제를 해결한 정보를 참고하실 수 있습니다:

이 링크들에서는 데이터 병합, 원핫 인코딩, 모델 학습과 예측의 전반적인 과정에서 발생할 수 있는 문제들과 해결 방안을 다루고 있습니다.

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

지은님의 프로필 이미지
지은

작성한 질문수

질문하기