Pandas Index의 새로운 뷰(view)를 생성하려면 index.view() 메서드를 사용합니다. 뷰는 원본 데이터와 동일한 메모리를 공유하면서 다른 dtype으로 데이터를 해석할 수 있게 해주는 강력한 기능입니다.
기본 사용법
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
Pandas 인덱스를 생성합니다.
index = pd.Index([50, 10, 70, 110, 90, 50, 110, 90, 30])
생성된 Pandas 인덱스를 출력해 확인합니다.
print("Pandas Index...\n", index)view('uint8')을 호출하여 새로운 뷰를 만듭니다. 이렇게 하면 기존 int64 데이터를 부호 없는 8비트 정수 관점에서 바라보게 됩니다.
res = index.view('uint8')새로 생성된 뷰를 출력합니다.
print("\nThe new view...\n", res)뷰는 원본과 동일한 기본 값을 공유하므로, 특정 위치의 값에 접근할 수 있습니다.
print("\nView for 0th index...\n", res[0])
print("\nView for 1st index...\n", res[1])전체 예제 코드
다음은 지금까지 설명한 내용을 모두 포함한 완전한 코드입니다.
import pandas as pd
# Pandas 인덱스 생성
index = pd.Index([50, 10, 70, 110, 90, 50, 110, 90, 30])
# Pandas 인덱스 출력
print("Pandas Index...\n", index)
# 인덱스에 포함된 요소 개수 반환
print("\nNumber of elements in the index...\n", index.size)
# 데이터의 dtype 객체 반환
print("\nThe dtype object...\n", index.dtype)
# 새로운 뷰 생성
res = index.view('uint8')
# 새로운 뷰 출력
print("\nThe new view...\n", res)
# 원본과 동일한 기본 값을 공유
print("\nView for 0th index...\n", res[0])
print("\nView for 1st index...\n", res[1])실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Pandas Index... Int64Index([50, 10, 70, 110, 90, 50, 110, 90, 30], dtype='int64') Number of elements in the index... 9 The dtype object... int64 The new view... [ 50 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 70 0 0 0 0 0 0 0 110 0 0 0 0 0 0 0 90 0 0 0 0 0 0 0 50 0 0 0 0 0 0 0 110 0 0 0 0 0 0 0 90 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0] View for 0th index... 50 View for 1st index... 0
결과 해석
출력 결과를 보면 흥미로운 점을 발견할 수 있습니다. 원본 인덱스는 9개의 int64(64비트) 요소를 가지고 있지만, uint8(8비트) 뷰로 변환하면서 각 요소가 8개의 바이트로 분해되어 총 72개의 값으로 확장되었습니다.
- res[0]의 값은 50으로, 첫 번째 int64 값(50)의 최하위 바이트(little-endian 방식)를 나타냅니다.
- res[1]의 값은 0인데, 이는 첫 번째 값 50이 8비트 범위(0~255) 안에 있어 상위 바이트가 모두 0이기 때문입니다.
- 만약 110처럼 255를 초과하는 값이 있다면, 해당 값은 여러 바이트에 걸쳐 저장됩니다.
이처럼 view() 메서드는 데이터 복사 없이 동일한 메모리를 다른 데이터 타입으로 재해석할 때 유용하게 활용됩니다.