Skip to content

(김*연)(강의노트 15장) .loc()의 활용 관련 #65

@Kdy0412

Description

@Kdy0412
Image

강의노트에서 시리즈 객체에 대한 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차원으로 커지면서 명확성이 더욱 중요시 여겨질텐데 []의 혼란성은 여전히 남아있는지 궁금합니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions