Pandas에서 마스크(mask) 조건에 따라 값을 설정한 새로운 Index 객체를 반환하려면 index.putmask() 메서드를 사용합니다. 이 메서드는 지정한 조건(마스크)이 참(True)인 위치의 값을 다른 값으로 교체한 결과를 새 인덱스 형태로 돌려줍니다.
putmask() 메서드란?
putmask()는 NumPy의 putmask 기능을 기반으로 하며, 첫 번째 인자로 불리언(Boolean) 마스크를, 두 번째 인자로 대체할 값을 받습니다. 조건이 참인 요소만 지정한 값으로 바뀌고, 나머지 요소는 원래 값을 그대로 유지합니다.
기본 사용법
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
Pandas 인덱스를 생성합니다.
index = pd.Index([5, 65, 10, 17, 75, 40])
생성된 Pandas 인덱스를 출력해 확인합니다.
print("Pandas Index...\n", index)이제 30보다 작은 값들을 111로 대체하는 마스크를 적용합니다.
print("\nMask...\n", index.putmask(index < 30, 111))전체 예제 코드
아래는 위 과정을 하나로 정리한 전체 코드입니다.
import pandas as pd
# Pandas 인덱스 생성
index = pd.Index([5, 65, 10, 17, 75, 40])
# Pandas 인덱스 출력
print("Pandas Index...\n", index)
# 인덱스에 포함된 요소 개수 확인
print("\nNumber of elements in the index...\n", index.size)
# 데이터의 dtype 확인
print("\nThe dtype object...\n", index.dtype)
# 30보다 작은 값을 111로 대체하는 마스크 적용
print("\nMask...\n", index.putmask(index < 30, 111))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Pandas Index... Int64Index([5, 65, 10, 17, 75, 40], dtype='int64') Number of elements in the index... 6 The dtype object... int64 Mask... Int64Index([111, 65, 111, 111, 75, 40], dtype='int64')
결과 해석
출력 결과를 보면 원본 인덱스 [5, 65, 10, 17, 75, 40] 중에서 30보다 작았던 값인 5, 10, 17이 모두 111로 변경된 것을 확인할 수 있습니다. 반면 65, 75, 40처럼 조건을 만족하지 않는 값들은 그대로 유지됩니다.
이처럼 putmask()를 활용하면 복잡한 반복문 없이도 조건 기반의 값 치환 작업을 간결하게 처리할 수 있어, 데이터 전처리 단계에서 매우 유용하게 사용됩니다.