728x90
pandas의 핵심 기능 중 하나는 조건에 따라 원하는 행(row)을 필터링하는 것입니다.
이 기능은 데이터 전처리, 분석, 시각화 등 거의 모든 단계에서 쓰입니다. 이 글에서는 다양한 조건 필터링 방법을 실전 코드 중심으로 정리해볼게요!
✅ 기본 예제 데이터프레임 생성
import pandas as pd
df = pd.DataFrame({
'이름': ['철수', '영희', '민수', '수지', '준호'],
'나이': [23, 25, 21, 20, 30],
'성별': ['남', '여', '남', '여', '남'],
'점수': [85, 90, 88, 95, 70]
})
🔹 1. 단일 조건으로 행 추출
▶ 예: 나이가 23세 이상인 사람
df[df['나이'] >= 23]
▶ 예: 성별이 '여'인 사람
df[df['성별'] == '여']
🔸 2. 여러 조건 결합 (AND / OR)
▶ 예: 나이가 23세 이상이고 점수가 80점 이상인 경우
df[(df['나이'] >= 23) & (df['점수'] >= 80)]
▶ 성별이 '남'이거나 점수가 90점 이상인 경우
df[(df['성별'] == '남') | (df['점수'] >= 90)]
💡 주의: 조건을 결합할 때는 각 조건을 괄호 ()로 감싸야 합니다. 그렇지 않으면 우선순위로 인해 오류가 발생할 수 있습니다.
🔍 특정 값 포함 여부로 필터링: isin()
▶ 성별이 '남' 또는 '여'인 경우
df[df['성별'].isin(['남', '여'])]
▶ 이름이 '영희' 또는 '수지'인 경우
df[df['이름'].isin(['영희', '수지'])]
❌ 특정 값 제외하기: ~ 연산자 사용
▶ 성별이 '남'이 아닌 사람
df[~(df['성별'] == '남')]
▶ 이름이 '철수'가 아닌 사람
df[~(df['이름'] == '철수')]
🕵️ 결측치(NaN) 처리
import numpy as np
# 결측치 추가
df.loc[2, '점수'] = np.nan
# 점수가 결측치가 아닌 행만 추출
df[df['점수'].notna()]
🧠 query() 메서드로 SQL처럼 필터링
# 나이가 23세 이상인 사람
df.query('나이 >= 23')
# 성별이 '여'이고 점수가 90점 이상인 사람
df.query("성별 == '여' and 점수 >= 90")
→ query() 메서드는 문자열로 조건을 작성하므로, 복잡한 조건을 보다 간결하게 표현할 수 있습니다.
🧪 실전 예제: 복합 조건 필터링
▶ 나이가 20세 이상 25세 이하이고, 점수가 85점 이상인 사람
df[(df['나이'] >= 20) & (df['나이'] <= 25) & (df['점수'] >= 85)]
▶ 이름에 '수'가 포함된 사람
df[df['이름'].str.contains('수')]
🔚 마무리하며
데이터를 다루다 보면 특정 조건에 맞는 데이터를 필터링하는 작업은 정말 자주 사용됩니다.
Pandas에서는 [], isin(), ~, query() 등 다양한 방식으로 조건에 맞는 행을 쉽게 추출할 수 있어요.
처음에는 괄호나 연산자 우선순위 때문에 헷갈릴 수 있지만, 몇 번만 익숙해지면 금방 자연스럽게 사용할 수 있습니다.
실무에서도 가장 많이 쓰이는 기능 중 하나이니 꼭 직접 예제도 돌려보며 연습해보시길 추천드립니다.
궁금한 점이나 더 알고 싶은 주제가 있다면 댓글로 남겨주세요! 😊
읽어주셔서 감사합니다. 🙏
728x90
'BackEnd > 파이썬' 카테고리의 다른 글
| 👉 Pandas에서 결측값 채우기 완전 정복: fillna, ffill, bfill 사용법 정리 (0) | 2025.06.12 |
|---|---|
| 🐼 Pandas에서 행 합계 계산하기: sum(axis=1) 완벽 가이드 (0) | 2025.06.11 |
| 🐼 Pandas에서 열 추가 및 삭제하기: 실전 예제로 마스터하기 (1) | 2025.06.10 |
| 🐼 Pandas에서 데이터프레임 열 타입 확인하기: df.info()와 df.dtypes 활용법 (0) | 2025.06.09 |
| 🐼 Pandas의 iloc vs loc 완벽 정리: 실무 예제로 이해하기 (0) | 2025.06.07 |