-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
강의노트에서 시리즈 객체에 대한 s[]은 s.loc[]와 동일하게 작동되나 데이터 프레임으로 넘어가면 서로 역할이 다르다고 언급했습니다.
저는 이 부분을 학습하면서 헷갈리는 점을 하나 찾았습니다.
우선 판다스 시리즈에서 s[], s.loc[], s.iloc[]의 역할을 정리해보았습니다.
정리한 내용은 다음과 같습니다.
- s[] : 라벨 기반 인덱싱 (슬라이싱의 경우 예외가 있음)
- s.loc[] : 라벨 기반 인덱싱/슬라이싱
- s.iloc[] : 위치 기반 인덱싱/슬라이싱
시리즈 객체 s[]은 s.loc[] 과 동일하게 라벨 기반으로 인덱싱/슬라이싱을 할 수 있으나 예외가 하나 있습니다. 바로 인덱스 라벨이 정수인 경우입니다.
import numpy as np
import pandas as pd
series1 = pd.Series([3000,4000,5000], index = [1,2,3], name = '과일 가격')
series1[1]np.int64(3000)
인덱싱을 할 경우에는 라벨 기반으로 정상적으로 작동하는 모습을 보여줍니다.
반면에 슬라이싱을 할 경우엔 다른 결과가 나옵니다.
series1[1:2]2 4000
Name: 과일 가격, dtype: int64
.loc[]과 동일하게 작동하려면 라벨 기반으로 슬라이싱 즉, 인덱스 라벨 1부터 2까지 값도 3000 4000 둘 다 나타나야 하는데 여기서는 4000만 출력합니다. 인덱스 1부터 2 이전까지 즉 인덱스 1번 항목만 출력합니다 이는 끝값을 포함 안하는 위치 기반의 .iloc[]과 동일하게 작동합니다.
이러한 비일관성과 혼란성 때문에 시리즈에서 []은 .loc[], .iloc[]에 비해 명확성이 떨어져 쓰이는 경우는 많지 않을 것으로 생각합니다.
따라서 궁금한 내용은 2가지가 있습니다.
- 판다스에서 이러한 설계를 계속 유지하는 이유는
.loc[]과.iloc[]가 이를 해결해주기 때문으로 보는게 맞을까요? - 데이터프레임으로 넘어가면 1차원 -> 2차원으로 커지면서 명확성이 더욱 중요시 여겨질텐데
[]의 혼란성은 여전히 남아있는지 궁금합니다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels