-
[Pandas] Boolean Indexing 알아보기Python 2024. 4. 15. 06:24728x90반응형
- 목차
키워드.
- Boolean Mask.
- Selection.
들어가며.
Pandas DataFrame 에서 특정 Cell, Row, Column, Subset 를 획득하는 여러가지 방식이 존재합니다.
그렇기 때문에 DataFrame 을 능숙하게 다루기 위해서 익숙해져야할 여러 요소들이 있습니다.
이번 글에서는 DataFrame 에서 Subset 를 추출하는 여러가지 방식들에 대해서 알아보도록 하겠습니다.
DataFrame Subset 추출하기.
DataFrame 의 Subset 를 추출하기 위해서 사용되는 몇가지 방식을 소개합니다.
1. Python List
2. Series
3. DataFrame
세가지 방식이 존재합니다.
먼저 DataFrame 을 생성합니다.
Student 와 관련된 DataFrame 을 간단히 생성하였습니다.
import pandas as pd students = [ ["Aaron",24, "LA", False], ["Bob", 44, "Seoul", True], ["Chris", 14, "Seoul", False] ] columns = ["name", "age", "city", "marriage"] student_df = pd.DataFrame(students, columns = columns)
name age city marriage 0 Aaron 24 LA False 1 Bob 44 Seoul True 2 Chris 14 Seoul False
Python List 를 활용하여 DataFrame Subset 추출하기.
Python List 를 사용하여 DataFrame 의 특정 칼럼만을 추출할 수 있습니다.
아래와 같이 Column 이름들로 구성된 Python List 를 사용하면 선택된 칼럼들로 구성된 DataFrame 의 Subset 를 추출할 수 있습니다.
columns = [ "marriage", "city"] student_df[columns]
marriage city 0 False LA 1 True Seoul 2 False Seoul
Python List 가 아닌 칼럼명을 입력하게 되면 Pandas Series 가 출력됩니다.
student_df[ "marriage" ]
0 False 1 True 2 False Name: marriage, dtype: bool
Series 를 활용하여 Subset 추출하기.
Series 를 활용하여 원본 DataFrame 으로부터 Subset 를 추출할 수 있습니다.
이 방식을 위해서는 Boolean Mask 생성하고, Boolean Mask 를 활용한 Boolean Indexing 을 적용합니다.
이는 Numpy 의 ndarray 에서도 동일하게 적용되는 컨셉이며, 관련된 링크를 공유합니다.
https://westlife0615.tistory.com/767
추출하고자하는 Column 들을 True 와 False 로 구성한 Boolean Mask 를 생성합니다.
그리고 아래와 같이 student_df 의 각 Row 에 아래와 같이 적용할 수 있습니다.
"name", "city" 의 값은 False, "age", "marriage" 의 값은 True 로 설정하였구요.
그 결과로서 age 와 marriage 정보만이 추출됩니다.
import pandas as pd student_bool_mask = pd.Series( index=["name", "age", "city", "marriage"], data=[False, True, False, True] ) student_df.iloc[0][student_bool_mask] student_df.iloc[1][student_bool_mask] student_df.iloc[2][student_bool_mask]
age 24 marriage False Name: 0, dtype: object age 44 marriage True Name: 1, dtype: object age 14 marriage False Name: 2, dtype: object
DataFrame 를 활용하여 Subset 추출하기.
Boolean Mask 를 구성하는 DataFrame 을 생성합니다.
Boolean Mask 로 구성된 DataFrame 을 생성하는 방식은 간단합니다.
DataFrame 과 Conditional Statement 를 적절히 결합하면 됩니다.
예시는 아래와 같습니다.
특정 칼럼의 값을 가지는 모든 Rows.
아래 예시는 name 이 "Aaron" 또는 "Bob" 인 Pandas Series 를 생성하는 Boolean Mask 입니다.
(student_df.name == "Aaron") | (student_df.name == "Bob")
0 True 1 True 2 False Name: name, dtype: bool
위 Boolean Mask 를 활용하여 name 이 "Aaron" 또는 "Bob" 인 Subset 를 추출할 수 있습니다.
student_df[(student_df.name == "Aaron") | (student_df.name == "Bob")]
name age city marriage 0 Aaron 24 LA False 1 Bob 44 Seoul True
특정 칼럼의 값을 제외한 모든 Rows.
아래 조건은 "나이가 20세 초과인 학생이 아닌 경우". 즉, 10대인 학생을 조회하는 문장입니다.
"~" Operator (tilde) 와 Pandas Series 가 결합되면 Series 의 값들은 모두 반전됩니다.
~(student_df.age > 20 )
0 False 1 False 2 True Name: age, dtype: bool
그래서 DataFrame 과 Series 를 결합하게 되면, 10대인 학생들로 구성된 Subset 를 추출할 수 있습니다.
student_df[~(student_df.age > 20 )]
name age city marriage 2 Chris 14 Seoul False
반응형'Python' 카테고리의 다른 글
[pandas] DataFrame melt 알아보기 (0) 2024.05.17 [Pandas] DataFrame loc, iloc 알아보기 (0) 2024.04.19 [Pandas] DataFrame pd.merge 알아보기 (Join) (0) 2024.04.09 [Python] yield 알아보기 ( generator ) (0) 2024.04.06 [Numpy] copy & view 알아보기 (Shallow, Deep Copy) (0) 2024.03.18