WjExplor Story

DataFrame 과 불린 인덱싱 본문

Python/Python : Jupyter

DataFrame 과 불린 인덱싱

더블유제이플로어 2025. 9. 24. 23:45

DataFrame에서 특정 조건에 맞는 데이터를 필터링하는 방법을 알아보자.
Numpy array에서 불린 인덱싱을 진행하였다.
유사한 개념이다.

예를 들어 칼로리가 500 미만의 상품들만 데이터를 확인하고 싶다면
우선 칼로리 컬럼을 먼저 받아보자

burger_df['calories']

이렇게 Pandas Series 가 나온다. 1차원 Numpy array 랑 꽤나 유사하다.

여기에 불린 연산을 해보자.

burger_df['calories'] < 500

각 제품이 500 칼로리 미만인지 아닌지에 대한 불린 값들이 쭉 나온다.

True 값이면 500 미만 칼로리 제품이라는 것이다. False 이면 500 이상 칼로리 제품이라는 것이다.

type(burger_df['calories'] < 500)
# pandas.core.series.Series

type을 확인해 보니 Pandas Series라고 한다.

Pandas Series 에다가 불린 연산을 하니 새로운 Pandas Series 가 만들어졌다.

인덱스로 있었던 상품명들이 그대로 남아있다.

Numpy array 에도 했던 거처럼 이걸로 masking , 즉 필터링을 하면 된다.

burger_df.loc[burger_df['calories'] < 500]

그러면 True 였던 상품만 필터링되어서 나오게 된다.

이런 식으로 특정 조건에 따라 필터링하는 건 데이터 분석할 때 많이 쓰는 기법이다. 꼭 이해하고 넘어가야 한다.

만약 모든 칼럼이 아닌 특정 칼럼만 보고 싶은 경우 

burger_df.loc[burger_df['calories'] < 500,'protein']
burger_df.loc[burger_df['calories'] < 500,['protein','category']]

단일 컬럼 혹은 칼럼 리스트를 작성하면 칼럼 일부분만 확인할 수 있다.

burger_df.loc[burger_df['calories'] < 500,'protein':'sodium']

아니면 데이터 슬라이싱으로 데이터를 일부분만 확인할 수 있다.

Tip

특정 컬럼만 받아 오고 싶다면 loc을 써야 하는데

만일 그냥 로우만 필터링하고 싶은 거라면 loc을 없애고 대괄호 안에 바로 써서 할 수 있다.

burger_df[burger_df['calories'] < 500]

또 다른 표현으로는 

mask = burger_df['calories'] < 500
burger_df[mask]

이렇게 mask 도 할 수 있다.

burger_df.loc[mask,'calories':'fat']

mask 변수를 사용하여 슬라이싱을 하면 해당 True 조건에서 슬라이싱 한 칼럼 데이터를 확인할 수 있다.