부울(불리언) 인덱싱은 부울 벡터(Boolean Vector)를 활용해 DataFrame에서 원하는 데이터를 손쉽게 선택할 수 있는 강력한 기법입니다. 이 방식을 사용하려면 부울 값(True/False)으로 구성된 인덱스를 가진 DataFrame이 필요합니다.
부울 인덱싱은 다음과 같은 순서로 진행됩니다.
- 데이터를 딕셔너리 형태로 생성합니다.
- 딕셔너리를 부울 인덱스가 적용된 DataFrame 객체로 변환합니다.
- 부울 인덱싱을 통해 데이터에 접근합니다.
아래 예제를 통해 자세히 살펴보겠습니다.
예제 1: 부울 인덱스를 가진 DataFrame 생성
import pandas as pd
# 데이터 정의
data = {
'Name': ['Hafeez', 'Srikanth', 'Rakesh'],
'Age': [19, 20, 19]
}
# 부울 인덱스 벡터를 사용해 DataFrame 생성
data_frame = pd.DataFrame(data, index=[True, False, True])
print(data_frame)
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Name Age
True Hafeez 19
False Srikanth 20
True Rakesh 19
이제 DataFrame의 각 행이 True 또는 False라는 부울 인덱스를 갖게 되었습니다. 이 상태에서 loc[], iloc[], ix[] 메서드에 부울 값을 전달하여 데이터에 접근할 수 있습니다.
예제 2: .loc[] 메서드로 접근하기
# .loc()을 사용한 데이터 접근
print(data_frame.loc[True])
출력 결과
위 코드를 실행하면 인덱스가 True인 모든 행이 출력됩니다.
Name Age
True Hafeez 19
True Rakesh 19
예제 3: .iloc[] 메서드로 접근하기
# .iloc()을 사용한 데이터 접근
# iloc은 정수 위치만 받기 때문에 True 대신 1을 전달합니다 (True == 1)
print(data_frame.iloc[1])
출력 결과
iloc[]는 위치 기반 인덱싱이므로 정수만 허용합니다. 파이썬에서 True는 정수 1과 동일하게 취급되므로, 여기서는 1을 전달했습니다.
Name Srikanth
Age 20
dtype: object
예제 4: .ix[] 메서드로 접근하기
# .ix[]을 사용한 데이터 접근
# .ix[]에는 부울 값과 정수 모두 전달 가능
print(data_frame.ix[True])
print()
print(data_frame.ix[1])
출력 결과
위 코드를 실행하면 두 가지 방식 모두 정상적으로 동작하는 것을 확인할 수 있습니다.
Name Age
True Hafeez 19
True Rakesh 19
Name Srikanth
Age 20
dtype: object
참고: .ix[]는 Pandas 0.20.0부터 지원 중단(deprecated)되었으며, 최신 버전에서는 제거되었습니다. 라벨 기반 접근에는 .loc[], 위치 기반 접근에는 .iloc[]을 사용하는 것이 권장됩니다.
부울 벡터를 직접 전달하는 방법
부울 인덱스를 활용하는 또 다른 방법은 부울 벡터를 DataFrame에 직접 전달하는 것입니다. 이 경우 True에 해당하는 모든 행이 출력됩니다.
일반 DataFrame 생성
import pandas as pd
# 데이터 정의
data = {
'Name': ['Hafeez', 'Srikanth', 'Rakesh'],
'Age': [19, 20, 19]
}
# 일반 DataFrame 생성
data_frame = pd.DataFrame(data)
print(data_frame)
출력 결과
Name Age
0 Hafeez 19
1 Srikanth 20
2 Rakesh 19
이제 부울 벡터를 DataFrame의 인덱스로 직접 전달해 보겠습니다.
부울 벡터 전달하기
# DataFrame 인덱스에 부울 벡터 전달
print(data_frame[[True, True, False]])
출력 결과
위 코드를 실행하면 True에 해당하는 행만 필터링되어 출력됩니다.
Name Age
0 Hafeez 19
1 Srikanth 20
마무리
지금까지 Pandas에서 부울 인덱싱을 활용하는 다양한 방법을 알아보았습니다. 부울 인덱스를 가진 DataFrame을 만들거나, 부울 벡터를 직접 전달하는 방식 모두 조건에 맞는 데이터를 빠르게 필터링할 수 있는 유용한 기법입니다. 부울 인덱싱에 대해 궁금한 점이 있다면 댓글로 남겨주세요!