Python/Pandas

Pandas에서 조건부 필터링 (Conditional Filtering)

임베디드 친구 2025. 10. 10. 19:39
반응형

Pandas에서 조건부 필터링 (Conditional Filtering)

데이터 분석에서 특정 조건을 만족하는 데이터를 추출하는 작업은 매우 중요합니다. Pandas에서는 간단한 문법을 통해 조건을 기반으로 원하는 데이터를 필터링할 수 있습니다. 이번 포스팅에서는 df[df['column'] > value] 형태의 조건부 필터링 방법과 다양한 활용 예제를 살펴보겠습니다.

1. 기본적인 조건부 필터링

Pandas에서는 특정 열(column)의 값을 기준으로 데이터 프레임을 필터링할 수 있습니다. 가장 기본적인 방법은 아래와 같습니다.

import pandas as pd

# 예제 데이터 생성
data = {
    '이름': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    '나이': [25, 30, 35, 40, 45],
    '점수': [85, 90, 95, 88, 76]
}

# DataFrame 생성
df = pd.DataFrame(data)

# '나이'가 30 이상인 데이터 필터링
filtered_df = df[df['나이'] >= 30]
print(filtered_df)

실행 결과

       이름  나이  점수
1      Bob   30   90
2  Charlie   35   95
3   David   40   88
4     Eve   45   76

위 코드에서 df['나이'] >= 30 조건을 만족하는 행만 필터링하여 새로운 데이터 프레임을 생성하였습니다.

2. 여러 조건을 활용한 필터링

& (AND) 연산자와 | (OR) 연산자를 사용하여 여러 조건을 조합할 수도 있습니다.

2.1 AND 조건 (&)

# '나이'가 30 이상이고, '점수'가 90 이상인 데이터 필터링
filtered_df = df[(df['나이'] >= 30) & (df['점수'] >= 90)]
print(filtered_df)

실행 결과

       이름  나이  점수
2  Charlie   35   95

위 코드에서 df['나이'] >= 30df['점수'] >= 90 조건을 동시에 만족하는 데이터를 필터링하였습니다.

2.2 OR 조건 (|)

# '나이'가 30 이상이거나, '점수'가 90 이상인 데이터 필터링
filtered_df = df[(df['나이'] >= 30) | (df['점수'] >= 90)]
print(filtered_df)

실행 결과

       이름  나이  점수
1      Bob   30   90
2  Charlie   35   95
3   David   40   88

3. 특정 값이 포함된 데이터 필터링 (isin 활용)

특정 값 목록에 포함된 행만 필터링하려면 isin() 메서드를 사용할 수 있습니다.

# 특정 이름을 가진 데이터 필터링
filtered_df = df[df['이름'].isin(['Alice', 'Charlie'])]
print(filtered_df)

실행 결과

       이름  나이  점수
0   Alice   25   85
2  Charlie   35   95

4. 특정 값이 포함되지 않은 데이터 필터링 (~isin 활용)

isin()을 반대로 적용하려면 ~ 연산자를 사용하면 됩니다.

# 특정 이름을 제외한 데이터 필터링
filtered_df = df[~df['이름'].isin(['Alice', 'Charlie'])]
print(filtered_df)

실행 결과

       이름  나이  점수
1      Bob   30   90
3   David   40   88
4     Eve   45   76

5. 문자열 조건 필터링 (str.contains 활용)

문자열 데이터를 필터링할 때 특정 문자열을 포함하는 데이터를 찾을 수 있습니다.

# '이름'에 'a'가 포함된 데이터 필터링 (대소문자 구분 X)
filtered_df = df[df['이름'].str.contains('a', case=False)]
print(filtered_df)

실행 결과

       이름  나이  점수
2  Charlie   35   95
3   David   40   88

위 코드에서 str.contains('a', case=False)를 사용하여 '이름' 열에서 'a'가 포함된 데이터를 필터링하였습니다.

6. 조건을 만족하지 않는 데이터 필터링 (~ 연산자 활용)

특정 조건을 만족하지 않는 데이터를 필터링하려면 ~ 연산자를 사용할 수 있습니다.

# '점수'가 90 미만인 데이터 필터링
filtered_df = df[~(df['점수'] >= 90)]
print(filtered_df)

실행 결과

       이름  나이  점수
0   Alice   25   85
3   David   40   88
4     Eve   45   76

7. query() 메서드를 활용한 조건부 필터링

Pandas의 query() 메서드를 사용하면 보다 직관적인 방식으로 필터링을 수행할 수 있습니다.

# '나이'가 30 이상인 데이터 필터링
filtered_df = df.query("나이 >= 30")
print(filtered_df)

실행 결과

       이름  나이  점수
1      Bob   30   90
2  Charlie   35   95
3   David   40   88
4     Eve   45   76

query() 메서드는 가독성이 높아 여러 개의 필터링 조건을 쉽게 적용할 수 있습니다.

마무리

이번 포스팅에서는 Pandas에서 조건을 기반으로 데이터를 필터링하는 다양한 방법을 살펴보았습니다.

  1. df[df['column'] > value] 기본적인 필터링 방법
  2. &, | 연산자를 활용한 여러 조건 필터링
  3. isin()을 활용한 특정 값 포함 여부 필터링
  4. str.contains()을 활용한 문자열 검색 필터링
  5. ~ 연산자를 활용한 조건 부정 필터링
  6. query() 메서드를 활용한 직관적인 필터링

데이터 분석을 진행할 때 필터링 기능을 잘 활용하면 원하는 데이터를 효과적으로 추출할 수 있습니다. 다양한 조건을 조합하여 더욱 복잡한 데이터 분석을 수행해 보시길 바랍니다.

반응형