Pandas로 데이터를 다루다 보면 불리언 인덱싱(Boolean Indexing) 을 자주 사용합니다.
이때 헷갈리기 쉬운 것이 바로 조건문에 괄호를 꼭 써야 하는지 여부입니다.
불리언 인덱싱 기본
예를 들어, 나이(age) 컬럼에서 20보다 큰 값만 필터링하고 싶다면:
import pandas as pd
df = pd.DataFrame({"age":[15, 25, 35, 45]})
df[df["age"] > 20]
두 조건 이상 결합할 때
문제는 조건을 여러 개 결합할 때입니다.
# ❌ 괄호 없이 쓰면 에러
df[df["age"] > 20 & df["age"] < 40]
# ValueError: The truth value of a Series is ambiguous
이유: 파이썬에서 비교 연산자(>, <) 와 비트 연산자(&, |) 의 우선순위가 달라서 Series 비교가 제대로 동작하지 않기 때문입니다.
올바른 방법: 괄호 사용
# ✅ 괄호로 묶어주면 정상 동작
df[(df["age"] > 20) & (df["age"] < 40)]
조건을 변수에 담은 경우
조건을 변수에 먼저 저장하면 괄호가 필요 없습니다.
cond = df["age"] > 20
df[cond & (df["age"] < 40)] # cond는 이미 불리언 Series이므로 괄호 불필요
정리
- 직접 조건식을 쓸 때 → 괄호 꼭 필요
- 조건을 변수에 담아 쓸 때 → 괄호 없어도 됨
한눈에 보기

따라서 조건을 직접 작성할 때는 반드시 괄호를 써야 하고, 변수로 담아둘 경우엔 괄호 없이도 안전합니다.
'파이썬 > 데이터프레임 다루기' 카테고리의 다른 글
| Pandas에서 불리언 인덱싱을 더 간단하게! query() 함수 사용법 (1) | 2025.08.30 |
|---|---|
| Pandas 불리언 인덱싱: 연산자 우선순위와 사용 규칙 (0) | 2025.08.30 |
| Pandas 그룹별 단일 값 매핑하기: CaseID별 CATEGORY 유일값 적용 (0) | 2025.04.18 |
| Pandas groupby().agg() vs groupby().apply() – 단일 값 매핑할 때 무엇이 더 적절할까? (0) | 2025.04.18 |
| Pandas에서 apply(set)과 issubset()으로 그룹 조건 필터링하기 (0) | 2025.04.18 |