파이썬/Pandas

Pandas 데이터 필터링 : 원하는 데이터만 골라내기

코샵 2024. 1. 19. 10:50
반응형

데이터 분석의 대부분은 쓸모 없는 정보를 걸러내고 관심 있는 부분만 추출하는 과정으로 구성됩니다. Pandas는 이러한 필터링 작업을 쉽게 해주는 다양한 기능을 제공하며, 이번 글에서는 그 중 핵심적인 방법들을 살펴보겠습니다.

 

1. 불린 인덱싱: 조건식으로 데이터 선택

판다스의 필터링 기본기를 다루는 것은 불린 인덱싱입니다. 이는 조건식을 활용하여 True/False 값을 반환하고, 이를 인덱스로 사용하여 원하는 데이터만 선택하는 방식입니다.

import pandas as pd

data = {'age': [25, 32, 40, 28, 18], 'city': ['서울', '대전', '인천', '대구', '부산']}
df = pd.DataFrame(data)

# 25세 이상 데이터만 필터링
df_filtered = df[df['age'] >= 25]

# 서울에 거주하는 30대 데이터만 필터링
df_filtered = df[(df['city'] == '서울') & (df['age'] >= 30)]

이처럼 조건식을 조합하여 다양한 필터링을 구현할 수 있습니다.

 

2. query(): 문자열 표현식으로 간편하게 필터링

query 메서드는 문자열 표현식을 활용하여 간편하게 필터링할 수 있습니다. 조건식을 직접 입력하여 코드를 줄이고 가독성을 높일 수 있습니다.

df_filtered = df.query("age >= 25 & city == '서울'")

이와 같이 익숙한 구문으로 필터링할 수 있습니다.

 

3. loc and iloc: 레이블과 위치 기반 선택

데이터프레임의 인덱스나 열 이름을 활용하여 특정 행이나 열을 선택할 수 있습니다.

  • loc: 레이블 기반 선택 (인덱스 이름/열 이름으로 지정)
  • iloc: 위치 기반 선택 (인덱스/열 위치로 지정)
# 0번째 행과 'age' 열만 선택
df_filtered = df.loc[0, 'age']

# 2번째 행부터 4번째 행까지, 'city' 열만 선택
df_filtered = df.iloc[1:4, df.columns.get_loc('city')]

loc과 iloc은 다양한 조건과 함께 유연하게 활용할 수 있습니다.

 

4. .isin(): 특정 값 포함 여부 필터링

특정 값을 포함하는 행이나 열을 선택할 수 있습니다.

# '대전' 또는 '부산'에 거주하는 사람만 선택
df_filtered = df[df['city'].isin(['대전', '부산'])]

# 25, 30, 35 값 중 하나를 포함하는 'age' 열만 선택
df_filtered = df['age'][df['age'].isin([25, 30, 35])]

isin 메서드는 여러 값을 한 번에 검사할 수 있어 편리합니다.

 

5. 그룹화와 필터링 조합: 복잡한 분석 지원

데이터를 그룹화한 후 조건에 따라 필터링하는 경우 그룹 객체의 메서드를 활용할 수 있습니다.

# 각 도시별 25세 이상 데이터 그룹화 후 필터링
for city, city_data in df.groupby('city'):
    city_filtered = city_data[city_data['age'] >= 25]
    # city_filtered에 각 도시별 25세 이상 데이터가 담김

그룹화를 통해 복잡한 조건 분석을 효과적으로 수행할 수 있습니다.

 

6. str.contains(): 문자열 패턴 기반 필터링

문자열이 포함된 텍스트 데이터를 다룰 때, str.contains() 메서드는 특정 문자열 패턴을 포함하는 데이터를 필터링하는 데 효과적입니다.

예시:

# 'age' 열에서 '40'이 포함된 열만 필터링
df_filtered = df[df['age'].str.contains('40')]

# 'city' 열에서 '서울'이 포함된 열만 필터링
df_filtered = df[df['city'].str.contains('서울')]

 

정규 표현식 활용: str.contains()는 정규 표현식과 함께 사용하여 더욱 세밀한 패턴 기반 필터링이 가능합니다.

예시:

# 'city' 열에서 '서'으로 시작하는 열만 필터링

df_filtered = df[df['city'].str.contains('^서')]

 

대소문자 구분: 기본적으로 대소문자를 구분하며, case=False 인수를 사용하여 대소문자 구분 없이 필터링할 수도 있습니다.

# 대소문자 구분 없이 '서울'이 포함된 주소만 필터링

df_filtered = df[df['city'].str.contains('서울', case=False)]

 

결론

Pandas 다양한 필터링 기능을 제공하여 원하는 데이터만 쉽게 추출할 있습니다. 이번 글에서 소개한 방법들을 익혀 꼼꼼하고 정확한 데이터 분석을 실현하세요!