Pandas: 연산자 체이닝을 사용하여 DataFrame의 행 필터링
이 게시물에서는 Pandas에서 연산자 체이닝을 사용하여 DataFrame 행을 필터링하는 방법을 설명합니다. 연산자 체이닝은 여러 연산을 하나의 표현식으로 연결하는 강력한 기법입니다. 이를 통해 코드를 더욱 간결하고 읽기 쉽게 만들 수 있습니다.
필수 조건
이 게시물을 진행하기 전에 다음 사항을 이해해야 합니다.
- Python 프로그래밍 언어
- Pandas 라이브러리
- DataFrame 개념
데이터 준비
먼저 연습을 위해 간단한 DataFrame을 만들어 보겠습니다.
import pandas as pd
# 데이터 딕셔너리 생성
data = {'이름': ['철수', '영희', '민수', '고운'],
'나이': [25, 23, 30, 27],
'점수': [80, 95, 70, 90]}
# DataFrame으로 변환
df = pd.DataFrame(data)
연산자 체이닝을 사용한 필터링
이제 연산자 체이닝을 사용하여 DataFrame에서 특정 조건에 맞는 행을 필터링해 보겠습니다.
- 예제 1: 나이가 25세 이상인 학생만 선택
df_filtered = df[df['나이'] >= 25]
위 코드는 다음과 같이 작동합니다.
df['나이'] >= 25
연산은 '나이' 열의 값이 25 이상인 행에 대해 True/False 값을 포함하는 새로운 Series를 생성합니다.df[ ]
연산은 True 값을 가진 인덱스만 선택하여 새 DataFrame을 만듭니다.
- 예제 2: 점수가 80점 이상이고 이름이 '철수' 또는 '영희'인 학생만 선택
df_filtered = df[(df['점수'] >= 80) & (df['이름'].isin(['철수', '영희']))]
df['이름'].isin(['철수', '영희'])
연산은 '이름' 열의 값이 '철수' 또는 '영희'인 행에 대해 True/False 값을 포함하는 Series를 생성합니다.&
연산자는 두 Series를 연결하여 모든 조건을 충족하는 행에 대해 True 값을 가진 새 Series를 만듭니다.
주의 사항
- 연산자 체이닝을 사용할 때는 괄호를 올바르게 사용해야 합니다.
- 여러 조건을 연결할 때는
&
(AND) 및|
(OR)와 같은 논리 연산자를 사용할 수 있습니다.
예제 코드
import pandas as pd
# 데이터 딕셔너리 생성
data = {'이름': ['철수', '영희', '민수', '고운'],
'나이': [25, 23, 30, 27],
'점수': [80, 95, 70, 90]}
# DataFrame으로 변환
df = pd.DataFrame(data)
# 예제 1: 나이가 25세 이상인 학생만 선택
df_filtered = df[df['나이'] >= 25]
print(df_filtered)
# 예제 2: 점수가 80점 이상이고 이름이 '철수' 또는 '영희'인 학생만 선택
df_filtered = df[(df['점수'] >= 80) & (df['이름'].isin(['철수', '영희']))]
print(df_filtered)
출력
이름 나이 점수
0 철수 25 80
2 민수 30 70
3 고운 27 90
이름 나이 점수
0 철수 25 80
1 영희 23 95
설명
data
딕셔너리는 '이름', '나이', '점수' 열을 포함하는 데이터를 저장합니다.df = pd.DataFrame(data)
코드는 딕셔너리 데이터를 사용하여 DataFrame을 만듭니다.df_filtered = df[df['나이'] >= 25]
코드는 '나이' 열의 값이 25 이상인 행을 선택하여 새 DataFrame을 만듭니다.print(df_filtered)
코드는 새 DataFrame을 출력합니다.df_filtered = df[(df['점수'] >= 80) & (df['이름'].isin(['철수', '영희']))]
코드는 '점수' 열의 값이 80 이상이고 '이름' 열의 값이 '철수' 또는 '영희'인 행을 선택하여 새 DataFrame을 만듭니다.
Pandas: DataFrame 행 필터링을 위한 대체 방법
하지만 연산자 체이닝 외에도 다양한 방법으로 DataFrame 행을 필터링할 수 있습니다.
다음은 몇 가지 대체 방법입니다.
loc 인덱서 사용
loc
인덱서는 특정 조건에 맞는 행을 선택하는 데 사용할 수 있는 강력한 도구입니다.
예를 들어, '나이' 열의 값이 25 이상인 행을 선택하려면 다음 코드를 사용할 수 있습니다.
df_filtered = df.loc[df['나이'] >= 25]
또는 '점수' 열의 값이 80 이상이고 '이름' 열의 값이 '철수' 또는 '영희'인 행을 선택하려면 다음 코드를 사용할 수 있습니다.
df_filtered = df.loc[(df['점수'] >= 80) & (df['이름'].isin(['철수', '영희']))]
query 메서드 사용
query
메서드는 SQL과 유사한 문자열 표현식을 사용하여 DataFrame 행을 필터링하는 데 사용할 수 있습니다.
df_filtered = df.query('나이 >= 25')
df_filtered = df.query('점수 >= 80 & 이름 in ["철수", "영희"]')
isin 함수 사용
isin
함수는 특정 값 목록에 포함된 행을 선택하는 데 사용할 수 있습니다.
df_filtered = df[df['이름'].isin(['철수', '영희'])]
numpy 함수 사용
NumPy 함수를 사용하여 Pandas DataFrame을 필터링할 수도 있습니다.
import numpy as np
df_filtered = df[np.where(df['나이'] >= 25)]
import numpy as np
df_filtered = df[np.where((df['점수'] >= 80) & (df['이름'].isin(['철수', '영희'])))]
irow
인덱서는 행 인덱스를 사용하여 특정 행을 선택하는 데 사용할 수 있습니다.
df_filtered = df.iloc[[0, 1, 2]]
연산자 체이닝 외에도 Pandas에서 DataFrame 행을 필터링하는 다양한 방법이 있습니다.
python pandas dataframe