해결된 질문
작성
·
53
·
수정됨
0
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요
먼저 유사한 질문이 있었는지 검색해보세요
풀이 도중에 자꾸 아래와 같은 오류가 뜨더라구요
KeyError: "['customerID'] not found in axis"
train = train.drop('customerID',axis=1)
test= test.drop('customerID',axis =1)
질문 1]그래서 해당 컬럼(customerID)만 드롭해서 아래와 같이 푸니까 에러는 안뜨는데 이걸 드롭해도 괜찮은지 아닌지는 어떻게 판단해야하나요?
질문 2]왜 customerID는 원핫인코딩으로 해결이 안되고 오류가 뜨는 건지 궁금합니다ㅠ
질문 3] customer id를 값이 모두 유니크해도 숫자형이면 유지하지만, 문자형이라 ID는 삭제했다고 하셨는데 숫자형이면 drop없이 그냥 원핫인코딩만 해도 에러가 안뜨는 걸까요?
질문 4]이런 오류를 방지하려면 아래와 같이 train과 test를 먼저 합쳐서 인코딩한 뒤, 다시 분리해서 사용하는게 안전할까요?
df_all = pd.concat([train, test])
df_all_encoded = pd.get_dummies(df_all)
train_encoded = df_all_encoded.iloc[:len(train), :]
test_encoded = df_all_encoded.iloc[len(train):, :]
답변 2
0
1
숫자형 ID라면 모델에 넣어도 에러는 안 나지만, 여전히 의미가 없을 수 있습니다.
문자형 ID는 one-hot 인코딩 시 너무 많은 컬럼을 만들 수 있어 삭제하는 게 일반적입니다.
2
원핫 인코딩 자체는 오류를 내지 않지만, 에러 메시지가 떴다면 해당 컬럼을 삭제한 뒤 다시 삭제하려고 해서 생긴 KeyError일 가능성이 큽니다. 삭제 코드와 데이터 불러오는 코드를 한 셀에서 함께 실행하면 문제를 예방할 수 있어요.
3 네, ID가 숫자면 원핫 인코딩 대상이 아닙니다.
4 ID가 문자인데 유니크 수가 너무 많은 상황이에요. train과 test ID가 같지도 않고요
설사 같다고 하더라도 train ID로 인해 컬럼이 4000개가 생겨버려요
1분 내에 학습하기에는 컬럼 수가 많습니다.
합쳐서 진행 보다는 ID컬럼 삭제가 깔끔합니다. 합친수 인코딩 하면 컬럼수가 5000개가 넘어갈 수도 있어요 테스트 해보시죠!
화이팅!!
0
안녕하세요, 인프런 AI 인턴입니다. seungji님, 질문해 주신 오류와 관련하여 설명드리겠습니다.
KeyError: "['customerID'] not found in axis"
오류는 데이터프레임에 존재하지 않는 컬럼을 삭제하려고 할 때 발생합니다. 이는 이미 ‘customerID’ 컬럼이 삭제되었거나 잘못된 컬럼명을 사용할 때 발생할 수 있습니다.
customerID
와 같은 컬럼은 각 기록을 고유하게 식별하는 ID이므로, 모델링에 사용되지 않고 분석에도 직접적인 기여를 하지 않기 때문에 삭제해도 무방합니다.customerID
는 유니크한 값이 너무 많아 원핫인코딩을 사용할 경우 컬럼의 수가 매우 증가하여 비효율적입니다. 또한, 원핫인코딩은 범주형 데이터에 사용되며, 굳이 유니크한 식별자에 사용할 필요는 없습니다.customerID
는 기본적으로 학습 및 예측에 필요한 데이터가 아니므로 삭제하고 진행하는 것이 일반적입니다.이와 유사한 문제에 대한 기존의 질문과 답변은 아래 링크에서 확인하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.