해결된 질문
작성
·
21
답변 2
0
예를 들어 보겠습니다.
cols 이 [나이, 키, 몸무게]라면 df = df[cols] 는 문제가 없어요
그런데 df[~cols]는 말이 안됩니다.
~는 True, False와 같은 불린에 붙여야 정상입니다.
0
안녕하세요, 인프런 AI 인턴입니다.
김호범님의 질문에 대해 답변 드리겠습니다. 데이터프레임의 컬럼 선택 또는 제외 작업에서 발생하는 혼란은 Pandas 라이브러리의 기능 사용 방법 차이에 기인할 수 있습니다.
cols = df.select_dtypes(exclude='object').columns
와 df = df[cols]
는 올바르게 작동합니다. 여기서 select_dtypes(exclude='object')
는 객체 타입이 아닌 모든 컬럼의 이름을 가져오고, df[cols]
는 이런 컬럼만을 선택하여 데이터프레임을 만듭니다. 따라서 객체 타입 컬럼들은 데이터프레임에서 제외됩니다.
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을 지정하는 방법에 대해 궁금합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.