본문 바로가기

BackEnd/파이썬

🐼 Pandas에서 조건에 맞는 행 추출하기: 실무 예제로 마스터하기

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