Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 Pandas 부울 인덱싱: True/False 값으로 데이터 필터링하기

True와 False, 그리고 1과 0과 같은 불리언(Boolean) 값은 판다스(Pandas) 데이터프레임에서 인덱스로 직접 사용할 수 있습니다. 이를 활용하면 원하는 레코드만 손쉽게 필터링할 수 있습니다. 이 글에서는 부울 인덱싱을 수행하는 다양한 방법을 예제와 함께 살펴보겠습니다.

부울 인덱스 생성하기

먼저 게임 데이터를 담은 데이터프레임을 생각해 보겠습니다. 요일별로 획득한 점수가 딕셔너리 형태로 저장되어 있습니다. 여기에 True와 False를 인덱스 값으로 지정하여 데이터프레임을 생성하고, 최종 결과를 출력해 보겠습니다.

예제

import pandas as pd
# 딕셔너리
game = {'Day':["Monday","Tuesday","Wednesday","Thursday","Friday"], 'points':[31,24,16,11,22]}
df = pd.DataFrame(game,index=[True,False,True,False,True])
print(df)

출력 결과

               Day       points
True        Monday           31
False      Tuesday           24
True     Wednesday           16
False     Thursday           11
True        Friday           22

위 코드를 실행하면 각 행이 True 또는 False를 인덱스로 갖는 데이터프레임이 생성된 것을 확인할 수 있습니다.

.loc[]을 사용한 필터링

.loc[] 함수는 특정 불리언 값을 가진 레코드만 추출할 때 유용합니다. 아래 예제에서는 인덱스가 True인 행들만 조회하는 방법을 살펴보겠습니다.

예제

import pandas as pd
# 딕셔너리
game = {'Day':["Monday","Tuesday","Wednesday","Thursday","Friday"], 'points':[31,24,16,11,22]}
df = pd.DataFrame(game,index=[True,False,True,False,True])
#print(df)
print(df.loc[True])

출력 결과

              Day           points
True       Monday       31
True    Wednesday       16
True       Friday       22

인덱스가 True인 월요일, 수요일, 금요일의 레코드만 필터링되어 출력됩니다.

.ix[]을 사용한 필터링

이 방법에서는 정수를 불리언 값처럼 활용합니다. 즉, 데이터프레임의 인덱스에 있는 True와 False를 각각 1과 0으로 바꾼 뒤, 이를 이용해 레코드를 필터링합니다.

예제

import pandas as pd
# 딕셔너리
game = {'Day':["Monday","Tuesday","Wednesday","Thursday","Friday"], 'points':[31,24,16,11,22]}
df = pd.DataFrame(game,index=[1,1,0,0,1])
#print(df)
print(df.ix[0])

출력 결과

        Day points
0 Wednesday     16
0 T hursday     11

인덱스가 0(즉, False)인 수요일과 목요일의 레코드가 출력됩니다.

참고로, .ix[]는 구버전 판다스에서 제공되던 인덱서로 현재는 공식적으로 지원 중단(deprecated)되었습니다. 최신 버전의 판다스를 사용한다면 위치 기반 인덱싱에는 .iloc[], 라벨 기반 인덱싱에는 .loc[]을 사용하는 것이 좋습니다.