0Pricing
Pandas & NumPy Academy · 강의

레이블 기반 및 위치 기반 접근

.loc(레이블)과 .iloc(정수 위치)로 원소를 가져오고 두 방식의 차이를 이해합니다.

레이블 기반 및 위치 기반 접근은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Series 요소에 접근하는 두 가지 방법

Pandas는 Series에서 요소를 선택할 때 사용하는 두 가지 기본 접근자를 제공합니다. .loc은 레이블 기반 접근에 사용하고, .iloc은 정수 위치 기반 접근에 사용합니다. 어떤 것을 언제 사용해야 하는지 이해하는 것은 매우 중요합니다. 정수 인덱스가 있는 Series에 잘못된 접근자를 사용하면 혼란스러운 결과가 나오며, Pandas 2.0에서는 의미가 모호한 직접 대괄호 사용 방식 중 상당수가 더 이상 권장되지 않습니다.

import pandas as pd

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.loc['b'])    # 20  -- by label
print(s.iloc[1])     # 20  -- by position

.loc: 레이블 기반 접근

.loc은 인덱스 레이블을 기준으로 요소에 접근합니다. 레이블 하나를 전달하면 스칼라를 반환하고, 레이블 목록을 전달하면 Series를 반환하며, 레이블 슬라이스를 전달하면 양 끝을 모두 포함하는 결과를 반환합니다. 이는 Python 슬라이스와 다릅니다. 레이블이 존재하지 않으면 Pandas는 KeyError를 발생시킵니다. 날짜, 이름, ID처럼 레이블 자체에 의미가 있을 때 .loc을 사용하십시오.

import pandas as pd

s = pd.Series([10, 20, 30, 40, 50],
              index=['a', 'b', 'c', 'd', 'e'])

print(s.loc['c'])          # 30
print(s.loc[['a', 'c']])   # a:10 c:30
print(s.loc['b':'d'])      # b:20 c:30 d:40 -- inclusive

.iloc: 위치 기반 접근

.iloc은 인덱스 레이블을 완전히 무시하고 정수 위치(0부터 시작)를 기준으로 요소에 접근합니다. Python 목록 인덱싱과 같은 방식으로 동작하므로 음수 위치는 끝에서부터 계산하고, 슬라이스는 Python의 끝 위치 미포함 규칙을 따릅니다. 레이블과 관계없이 'n번째' 요소가 필요할 때 .iloc을 사용하십시오.

import pandas as pd

s = pd.Series([10, 20, 30, 40, 50],
              index=['a', 'b', 'c', 'd', 'e'])

print(s.iloc[2])          # 30  -- third element
print(s.iloc[-1])         # 50  -- last element
print(s.iloc[1:4])        # b:20 c:30 d:40 -- exclusive stop

.loc과 .iloc의 차이

이 차이는 정수 레이블을 사용하는 Series에서 특히 중요합니다. Series의 인덱스 레이블이 [5, 10, 15]라면 s.loc[5]는 레이블이 5인 요소, 즉 첫 번째 요소를 반환합니다. 반면 s.iloc[5]는 IndexError를 발생시킵니다. 요소가 3개뿐이기 때문입니다. 항상 '레이블이 X인 요소'를 의미하는지, 아니면 'X번째 요소'를 의미하는지에 따라 선택하십시오.

import pandas as pd

s = pd.Series([100, 200, 300], index=[5, 10, 15])
print(s.loc[10])   # 200  -- element with label 10
print(s.iloc[1])   # 200  -- second element
# s.loc[1] would raise KeyError -- no label 1

.loc으로 여러 레이블 선택

.loc에 목록을 전달하면 여러 요소를 원하는 순서로 선택할 수 있으며, 같은 요소를 반복해서 선택할 수도 있습니다. 결과는 전달한 목록과 동일한 레이블을 가진 새로운 Series입니다. 이는 NumPy의 고급 인덱싱과 비슷하지만 위치가 아니라 인덱스 레이블을 기준으로 정렬됩니다. 분석 파이프라인에서 열의 순서를 바꾸거나 일부 열만 선택할 때 흔히 사용합니다.

import pandas as pd

s = pd.Series({'Jan': 100, 'Feb': 200, 'Mar': 300, 'Apr': 400})

# Select Q1 months in reverse order
print(s.loc[['Mar', 'Feb', 'Jan']])
# Mar    300
# Feb    200
# Jan    100

.loc을 사용한 레이블 슬라이싱

Python 슬라이스와 달리 .loc의 슬라이스는 양 끝을 모두 포함합니다. s.loc['b':'d']는 레이블이 b, c, d인 요소를 반환합니다. Python의 끝 위치 미포함 규칙에 익숙하다면 이 동작이 놀라울 수 있습니다. 슬라이스의 양 끝에 지정한 레이블이 실제로 인덱스에 존재하는지 확인하십시오. 그렇지 않으면 슬라이스가 예상과 다른 결과를 조용히 반환할 수 있습니다.

import pandas as pd

s = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['b':'d'])
# b    1
# c    2
# d    3
# dtype: int64
# Note: 'd' is INCLUDED (inclusive stop)

.loc을 사용한 불리언 인덱싱

.loc에 불리언 Series를 전달하면 요소를 필터링할 수 있습니다. 이 불리언 Series는 대상 Series와 동일한 인덱스를 가져야 합니다. 이는 NumPy 불리언 마스킹에 해당하는 Pandas 방식이며, &와 |를 사용한 복합 조건도 지원합니다. DataFrames에서 행을 필터링할 때도 표준적으로 사용하는 방법입니다.

import pandas as pd

s = pd.Series([3, 7, 2, 9, 1], index=['a', 'b', 'c', 'd', 'e'])
print(s.loc[s > 4])
# b    7
# d    9
# dtype: int64

.loc과 .iloc을 사용한 값 설정

.loc과 .iloc은 모두 할당문의 왼쪽에 사용하여 값을 직접 수정할 수 있습니다. 이것이 올바른 방식입니다. s['a'] = 99와 같은 연쇄 인덱싱을 사용하면 DataFrames에서 SettingWithCopyWarning이 발생할 수 있습니다. Series에서는 직접 레이블 접근도 일반적으로 안전하지만, .loc을 사용하면 의도가 명확하므로 권장됩니다.

import pandas as pd

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s.loc['b'] = 99
print(s)
# a    10
# b    99
# c    30

Series에서 대괄호로 접근하기

직접 대괄호 표기법인 s['label']은 레이블 접근에 사용할 수 있으며, 문자열 인덱스에서는 s.loc['label']과 같습니다. 정수 인덱스에서는 동작이 모호했지만 Pandas 2.0에서 변경되어 이제 항상 레이블 접근을 의미합니다. 명확하고 향후에도 안정적인 코드를 작성하려면 대괄호의 모호성 해석에 의존하지 말고 항상 .loc 또는 .iloc을 명시적으로 사용하십시오.

import pandas as pd

s = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(s['y'])      # 20  -- label access via brackets
print(s.loc['y']) # 20  -- explicit and preferred

DatetimeIndex에서 요소에 접근하기

Series에 DatetimeIndex가 있으면 .loc에서 일부 날짜만 지정한 문자열을 사용하여 편리하게 범위를 선택할 수 있습니다. s.loc['2023']은 2023년의 모든 요소를 반환하고, s.loc['2023-01':'2023-06']은 2023년의 전반기 요소를 반환합니다. 이는 시계열 작업에서 Pandas가 제공하는 가장 편리한 기능 중 하나입니다.

import pandas as pd

dates = pd.date_range('2023-01-01', periods=5, freq='ME')
values = pd.Series([10, 20, 30, 40, 50], index=dates)
print(values.loc['2023-03':'2023-05'])
# 2023-03-31    30
# 2023-04-30    40
# 2023-05-31    50

단일 요소에 빠르게 접근하는 at과 iat

.at[label]과 .iat[position]은 스칼라 전용 접근자입니다. 반복문에서 단일 요소에 접근할 때 Series 객체를 반환하는 데 필요한 추가 작업을 건너뛰므로 .loc과 .iloc보다 빠릅니다. 여러 요소를 선택할 수는 없습니다. 단일 요소를 반복해서 조회할 때 최대 성능이 필요하다면 사용하십시오.

import pandas as pd

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.at['b'])    # 20  -- label scalar access
print(s.iat[2])     # 30  -- position scalar access

빠른 확인

이 레슨에서 배운 .loc과 .iloc에 대한 이해도를 확인해 보십시오.

레슨 요약

이 레슨에서는 다음을 배웠습니다. .loc은 인덱스 레이블로 요소에 접근하며 슬라이스의 끝을 포함합니다. .iloc은 Python 목록처럼 슬라이스의 끝을 포함하지 않고 정수 위치로 요소에 접근합니다. 또한 .at과 .iat은 반복문에서 단일 요소를 조회할 때 더 빠른 스칼라 접근자입니다. 다음으로 Series의 벡터화 연산과 Pandas가 인덱스 정렬을 자동으로 처리하는 방식을 살펴보겠습니다.

자주 묻는 질문

“레이블 기반 및 위치 기반 접근” 강의는 무료인가요?

네 — “레이블 기반 및 위치 기반 접근” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“레이블 기반 및 위치 기반 접근”에서 뭘 배우나요?

.loc(레이블)과 .iloc(정수 위치)로 원소를 가져오고 두 방식의 차이를 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“레이블 기반 및 위치 기반 접근” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Series 만들기
  2. 레이블 기반 및 위치 기반 접근
  3. Series의 벡터화 연산
  4. 유용한 Series 메서드
← Pandas & NumPy Academy(으)로 돌아가기