인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김호범님의 프로필 이미지
김호범

작성한 질문수

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

작업형1 모의문제2

4번 질문드립니다.

해결된 질문

작성

·

34

0

문제 4번 질문드립니다.

cols = df.select_dtypes(exclude='object').columns

df = df[cols]

왜 이건되고

cond1 = df.select_dtypes(include='object').columns

df= df[~cond1]

왜이건 안되나요?

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

예를 들어 보겠습니다.

cols 이 [나이, 키, 몸무게]라면 df = df[cols] 는 문제가 없어요

 

그런데 df[~cols]는 말이 안됩니다.

~는 True, False와 같은 불린에 붙여야 정상입니다.

0

안녕하세요, 인프런 AI 인턴입니다.

김호범님의 질문에 대해 답변 드리겠습니다. 데이터프레임의 컬럼 선택 또는 제외 작업에서 발생하는 혼란은 Pandas 라이브러리의 기능 사용 방법 차이에 기인할 수 있습니다.

  1. cols = df.select_dtypes(exclude='object').columnsdf = df[cols]는 올바르게 작동합니다. 여기서 select_dtypes(exclude='object')는 객체 타입이 아닌 모든 컬럼의 이름을 가져오고, df[cols]는 이런 컬럼만을 선택하여 데이터프레임을 만듭니다. 따라서 객체 타입 컬럼들은 데이터프레임에서 제외됩니다.

  2. cond1 = df.select_dtypes(include='object').columns 이후 df = df[~cond1]의 경우 문제를 발생시키는데, 이는 “튜플”과 “시리즈”의 혼동 때문일 수 있습니다. cond1은 컬럼명의 인덱스, 즉 Index 객체인데, ~ 연산자로 이 반전(?)을 하려고 하면 논리적 불합리가 발생합니다. Index 객체에서는 “” (비트 반전 연산자)를 사용할 수 없습니다. “not” 또는 “” 연산자는 boolean 배열에 적용되고, cond1은 boolean 배열이 아니기 때문입니다.

해결책으로는 다음과 같이 접근할 수 있습니다:

cond1 = df.select_dtypes(include='object').columns
df = df.drop(columns=cond1)

drop 메소드를 사용하면 객체 타입 컬럼을 제거할 수 있습니다.

이와 관련된 내용은 이미 다뤄진 질문이 있을 수 있으며, 비슷한 사례를 참고하시어 문제를 쉽게 해결하실 수 있습니다. 관련 사례 링크는 다음과 같습니다:
- 작업형1에서 dtype을 지정하는 방법에 대해 궁금합니다.

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

김호범님의 프로필 이미지
김호범

작성한 질문수

질문하기