Pandas 데이터 필터링

PandasBeginner
지금 연습하기

소개

Pandas 필터링 데이터 실습에 오신 것을 환영합니다! 데이터 필터링은 데이터 분석에서 가장 흔하고 필수적인 작업 중 하나입니다. 특정 기준을 충족하는 데이터의 하위 집합을 선택할 수 있게 하여 분석에 가장 관련성이 높은 정보에 집중할 수 있도록 합니다.

Pandas 는 데이터 조작 및 분석을 위한 강력한 Python 라이브러리입니다. 핵심 데이터 구조인 DataFrame 은 행과 열을 가진 2 차원 데이터 테이블입니다. 이 실습에서는 Pandas DataFrame 에서 행을 필터링하는 몇 가지 기본적인 기법을 배우게 됩니다. 다음 내용을 다룰 것입니다:

  • 단일 부울 조건으로 필터링하기.
  • 논리 연산자를 사용하여 여러 조건을 결합하기.
  • 여러 값을 일치시키기 위해 isin() 메서드 사용하기.
  • 누락된 데이터 (NaN) 가 있는 행 제거하기.
  • 필터링된 데이터 결과 개수 세기.

이 실습이 끝나면 Pandas 프로젝트에서 데이터를 선택하고 격리하는 데 탄탄한 기반을 갖추게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 97%입니다.학습자들로부터 98%의 긍정적인 리뷰율을 받았습니다.

부울 조건으로 행 필터링

이 단계에서는 가장 기본적인 필터링 기법인 부울 인덱싱 (boolean indexing) 을 배우게 됩니다. 이 방법은 TrueFalse 값을 반환하는 Pandas Series 를 생성하는 부울 조건을 만드는 것을 포함합니다. 이 Series 를 DataFrame 에 전달하면 값이 True인 행만 반환됩니다.

먼저 30 세 이상인 모든 직원을 찾기 위해 DataFrame 을 필터링해 보겠습니다.

먼저 왼쪽 편집기에서 main.py 파일을 엽니다. 파일에는 샘플 DataFrame 이 미리 채워져 있습니다.

이제 main.py 하단의 기존 print 문을 다음 코드로 바꿉니다. 이 코드는 df['Age'] > 30이라는 부울 조건을 생성하고 이를 사용하여 DataFrame 을 필터링합니다.

## Filter for employees older than 30
older_than_30 = df[df['Age'] > 30]

print("Employees older than 30:")
print(older_than_30)

이제 완전한 main.py 파일은 다음과 같이 보일 것입니다:

import pandas as pd
import numpy as np

## Create a sample DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank'],
    'Department': ['HR', 'HR', 'Sales', 'IT', 'IT', 'Finance'],
    'Age': [25, 45, 38, 52, 29, 33],
    'Salary': [50000, 80000, 75000, 95000, 62000, np.nan]
}

df = pd.DataFrame(data)

## Filter for employees older than 30
older_than_30 = df[df['Age'] > 30]

print("Employees older than 30:")
print(older_than_30)

이제 스크립트를 실행해 보겠습니다. 터미널을 열고 다음 명령을 실행합니다:

python3 main.py

나이가 30 세보다 많은 직원만 나열하는 다음 출력이 표시됩니다.

Employees older than 30:
      Name Department  Age   Salary
1      Bob         HR   45  80000.0
2  Charlie      Sales   38  75000.0
3    David         IT   52  95000.0
5    Frank    Finance   33      NaN

'&' 연산자를 사용하여 필터 결합

이 단계에서는 여러 조건을 결합하여 더 복잡한 필터링을 수행합니다. 논리 연산자를 사용하여 부울 조건을 결합할 수 있습니다. 가장 일반적인 연산자는 AND 의 경우 &이고 OR 의 경우 |입니다.

각 조건은 Python 의 연산자 우선순위 때문에 괄호 ()로 묶어야 한다는 중요한 구문 규칙이 있습니다.

DataFrame 을 필터링하여 'IT' 부서에 속하고 또한 30 세 이상인 직원을 찾아보겠습니다.

main.py 파일을 수정합니다. 이전 단계의 필터링 코드를 아래의 새 코드로 바꿉니다.

## Filter for employees in IT and older than 30
it_and_older = df[(df['Department'] == 'IT') & (df['Age'] > 30)]

print("IT employees older than 30:")
print(it_and_older)

각 조건인 df['Department'] == 'IT'df['Age'] > 30이 자체 괄호로 묶여 있는 것을 확인하세요.

main.py 파일을 저장하고 터미널에서 실행합니다:

python3 main.py

출력에는 두 조건을 모두 만족하는 직원만 표시됩니다. 저희 데이터셋에서는 David 만이 이 기준에 부합합니다.

IT employees older than 30:
    Name Department  Age   Salary
3  David         IT   52  95000.0

isin 메서드를 사용하여 값 일치

이 단계에서는 열의 값이 여러 가능한 값 중 하나인 행을 필터링하는 방법을 배웁니다. 여러 | (OR) 조건을 사용할 수도 있지만, 더 효율적이고 읽기 쉬운 방법은 isin() 메서드를 사용하는 것입니다. 이 메서드는 값 목록을 받아 열의 값이 해당 목록에 있는 각 행에 대해 True를 반환합니다.

'HR' 또는 'Finance' 부서에서 일하는 모든 직원을 찾아보겠습니다.

main.py 파일의 필터링 로직을 다음 코드로 업데이트합니다:

## Filter for employees in HR or Finance departments
hr_or_finance = df[df['Department'].isin(['HR', 'Finance'])]

print("Employees in HR or Finance:")
print(hr_or_finance)

여기서 isin(['HR', 'Finance'])Department 열에서 'HR' 또는 'Finance' 값을 가진 행을 확인합니다.

파일을 저장하고 터미널에서 스크립트를 실행합니다:

python3 main.py

출력에는 지정된 부서의 모든 직원이 표시됩니다.

Employees in HR or Finance:
    Name Department  Age   Salary
0  Alice         HR   25  50000.0
1    Bob         HR   45  80000.0
5  Frank    Finance   33      NaN

notnull 을 사용하여 NaN 제거

이 단계에서는 누락된 데이터를 처리하는 방법을 알아봅니다. Pandas 에서 누락된 값은 일반적으로 NaN (Not a Number) 으로 표현됩니다. 계산을 수행하기 전에 이러한 누락된 값을 포함하는 행을 필터링해야 하는 경우가 많습니다.

notnull() 메서드는 누락되지 않은 값에 대해 True를, 누락된 (NaN) 값에 대해 False를 반환하는 부울 Series 를 반환합니다. 이를 사용하여 특정 열에 NaN이 있는 행을 쉽게 제거할 수 있습니다.

급여 정보가 있는 직원만 보려면 DataFrame 을 필터링해 보겠습니다.

main.py 파일을 수정하여 Salary 열에 notnull() 메서드를 사용합니다.

## Filter out rows with missing Salary
valid_salary = df[df['Salary'].notnull()]

print("Employees with valid salary information:")
print(valid_salary)

이 코드는 Salary 열에 NaN이 포함되지 않은 모든 행을 선택합니다.

파일을 저장하고 터미널에서 스크립트를 실행합니다:

python3 main.py

출력에서 볼 수 있듯이 급여가 NaN이었던 Frank 는 결과에서 제외되었습니다.

Employees with valid salary information:
      Name Department  Age   Salary
0    Alice         HR   25  50000.0
1      Bob         HR   45  80000.0
2  Charlie      Sales   38  75000.0
3    David         IT   52  95000.0
4      Eve         IT   29  62000.0

len 함수를 사용하여 필터링된 행 수 계산

이 마지막 단계에서는 필터링된 DataFrame 의 행 수를 세는 방법을 배웁니다. 필터를 적용한 후에는 종종 기준에 맞는 행이 몇 개인지 알아야 합니다. 이를 수행하는 간단한 방법은 Python 의 내장 함수인 len()을 사용하는 것입니다. 이 함수는 DataFrame 의 행 수를 반환합니다.

'IT' 부서의 모든 직원을 필터링한 다음 수를 세어 보겠습니다.

main.py 파일을 다음 코드로 업데이트합니다. 먼저 DataFrame 을 필터링한 다음 결과로 나온 필터링된 DataFrame 을 len() 함수에 전달합니다.

## Filter for employees in the IT department
it_employees = df[df['Department'] == 'IT']

## Count the number of IT employees
num_it_employees = len(it_employees)

print(f"Number of employees in IT: {num_it_employees}")

이 코드는 먼저 IT 부서의 행만 포함하는 새 DataFrame it_employees를 생성합니다. 그런 다음 이 새 DataFrame 의 길이를 계산하고 결과와 함께 형식화된 문자열을 출력합니다.

파일을 저장하고 스크립트를 실행합니다:

python3 main.py

출력은 개수를 알려주는 한 줄입니다.

Number of employees in IT: 2

요약

Pandas 필터링 데이터 실습을 완료하신 것을 축하드립니다!

이 실습에서는 Pandas DataFrame 에서 데이터의 하위 집합을 선택하는 필수 기술을 배우고 연습했습니다. 다음 내용을 다루었습니다:

  • 부울 인덱싱 (Boolean Indexing): 단일 조건에 따라 데이터를 필터링합니다 (예: df[df['Age'] > 30]).
  • 필터 결합: & (AND) 연산자를 사용하여 여러 조건을 동시에 적용하며, 각 조건을 괄호로 묶어야 함을 기억합니다.
  • isin()을 사용한 값 일치: 주어진 목록의 값과 일치하는 열 값을 가진 행을 효율적으로 필터링합니다.
  • 누락된 데이터 처리: notnull() 메서드를 사용하여 NaN 값이 있는 행을 제거합니다.
  • 필터링된 행 수 세기: len() 함수를 사용하여 필터링된 DataFrame 의 행 수를 얻습니다.

이러한 필터링 기술은 거의 모든 데이터 분석 작업의 기초입니다. 이를 숙달하면 데이터셋을 효과적으로 탐색하고 추가 분석 및 시각화를 위해 준비할 수 있습니다. 이러한 기술을 계속 연습하여 Pandas 사용 능력을 향상시키십시오.