Python

[Pandas] 데이터 필터링: isin vs contains

주댕이 2024. 11. 18. 23:58

# isin

  • isin은 특정 값들의 목록(리스트, 시리즈 등)이 데이터프레임이나 시리즈의 값에 포함되어 있는지를 확인하는 데 사용된다.
  • 여러 값 중 하나라도 일치하면 True를 반환한다.
  • 주로 ==(동등 비교)를 여러 값에 대해 한꺼번에 수행할 때 사용한다.
  • 대소문자를 구분한다.
import pandas as pd

# 데이터 생성
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]})

# 특정 이름이 포함된 행 필터링
filter_names = ['Alice', 'Charlie']
filtered_df = df[df['Name'].isin(filter_names)]

print(filtered_df)

# 결과:
#       Name  Age
# 0    Alice   25
# 2  Charlie   35

 

 

# contains

  • contains는 특정 문자열 패턴이 시리즈의 각 값에 포함되어 있는지를 확인하는 데 사용된다.
  • 값 전체가 아니라 부분 일치(부분 문자열 또는 정규식 패턴)를 확인한다.
  • 정규 표현식을 지원한다(기본값 regex=True).
  • 대소문자를 구분한다(기본값 case=True).
  • Series에서만 사용할 수 있다(str.contains()로 호출).
# 특정 문자열이 포함된 행 필터링
filtered_df = df[df['Name'].str.contains('li')]

print(filtered_df)

# 결과:
#      Name  Age
# 0   Alice   25
# 2  Charlie   35

 

 

# isin vs contains

특징 isin contains
주요 목적 특정 값(완전 일치)이 존재하는지 확인 특정 패턴(부분 일치)이 존재하는지 확인
적용 대상 DataFrame/Series Series (문자열 전용)
지원 리스트, 튜플, 시리즈 문자열, 정규 표현식
대소문자 구분 항상 구분 기본적으로 구분 (옵션: case=False)
정규 표현식 지원 지원하지 않음 지원 (옵션: regex=True)

 

 

# 주의사항

## isin은 리스트/시리즈를 입력으로 받아야 한다

  • 단일 문자열 비교 시 isin이 적합하지 않다:
# 잘못된 예제
df[df['Name'].isin('Alice')]  # TypeError 발생

# 올바른 예제
df[df['Name'].isin(['Alice'])]

 

## contains는 문자열 전용이다

  • 숫자 데이터에 바로 사용할 수 없다.
# 잘못된 예제
df[df['Age'].str.contains('2')]  # AttributeError 발생

# 올바른 예제
df[df['Age'].astype(str).str.contains('2')]

 

## 정규 표현식을 사용하는 경우

  • contains에서 regex=True는 정규식 패턴을 사용하므로 예기치 않은 결과를 방지하려면 regex=False를 지정해야 할 때도 있다.
df[df['Name'].str.contains('Al|Bob', regex=True)]  # 정규식 사용
df[df['Name'].str.contains('Al|Bob', regex=False)]  # 문자열 그대로 찾기
728x90