데이터 분석의 대부분은 쓸모 없는 정보를 걸러내고 관심 있는 부분만 추출하는 과정으로 구성됩니다. 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는 다양한 필터링 기능을 제공하여 원하는 데이터만 쉽게 추출할 수 있습니다. 이번 글에서 소개한 방법들을 익혀 꼼꼼하고 정확한 데이터 분석을 실현하세요!
'파이썬 > Pandas' 카테고리의 다른 글
저장된 파일을 데이터프레임으로 읽어올 때 na_values, na_filter 매개변수 활용하기 (0) | 2024.01.21 |
---|---|
ValueError: Cannot mask with non-boolean array containing NA / NaN values (0) | 2024.01.20 |
Pandas DataFrame의 행을 순회하는 방법 (0) | 2024.01.18 |
read_csv로 csv파일을 읽을 때 Unnamed : 0 열이 생기지 않도록 파일을 여는 방법 (0) | 2024.01.17 |
Pandas DataFrame의 열 추가하기 (0) | 2024.01.16 |