인덱싱
DataFrame에서 특정 데이터를 골라내는 것
Pandas에서는 2차원 인덱싱을 지원하기 위해 라벨, 라벨 리스트, 슬라이싱을 통해 인덱싱을 할 수 있을 뿐만 아니라 loc, iloc라는 인덱서를 제공한다.
이 글에서는 loc 인덱서에 대해 정리한다.
loc
라벨 값을 기반으로 2차원 인덱싱하며 아래와 같이 사용할 수 있다.
df.loc[행 인덱스]
df.loc[행 인덱스, 열 인덱스]
인덱스는 아래와 같은 값이 올 수 있다.
- 인덱스 데이터
- 슬라이스
- 리스트
- boolean series
- 인덱스 데이터, 슬라이스, 리스트, boolean series를 반환하는 함수
예시
아래 DataFrame을 예시로 하여 정리한다.
df = pd.DataFrame(np.arange(10, 22).reshape(3, 4),
index=["a", "b", "c"],
columns=["A", "B", "C", "D"])
df
# 실행 결과
A B C D
a 10 11 12 13
b 14 15 16 17
c 18 19 20 21
인덱싱 값이 하나인 경우
전달한 인덱스에 해당하는 행을 선택해 시리즈로 반환한다.
df.loc['b']
# 실행 결과
A 14
B 15
C 16
D 17
슬라이싱도 할 수 있으며, 이 경우 loc를 쓰지 않았을 때와 동일하다.
df.loc['a':'b']
df['a':'b']
# 실행 결과
A B C D
a 10 11 12 13
b 14 15 16 17
A B C D
a 10 11 12 13
b 14 15 16 17
인덱스를 리스트로 전달할 수도 있다.
df.loc[['a','b']]
# 실행 결과
A B C D
a 10 11 12 13
b 14 15 16 17
boolean series로 조건에 맞는 행만 선택할 수 있다.
df.A > 15
df.loc[df.A > 15]
# 실행 결과
a False
b False
c True
Name: A, dtype: bool
A B C D
c 18 19 20 21
인덱스 대신 인덱스를 반환하는 함수를 사용할 수 있다.
def select_rows(df):
return df.A > 15
df[select_rows(df)]
# 실행 결과
A B C D
c 18 19 20 21
행, 열 모두 인덱스를 받는 경우
단일 값을 지정할 때는 아래와 같이 사용한다.
df.loc['a', 'A']
# 실행 결과
10
행, 열 모두 슬라이싱을 하거나 리스트를 사용할 수 있다.
df.loc['b':, 'A']
df.loc[["a", "b"], ["B", "D"]]
# 실행 결과
b 14
c 18
Name: A, dtype: int32
B D
a 11 13
b 15 17
행 인덱스가 boolean series거나 boolean series를 반환하는 함수가 될 수도 있다.
def select_rows(df):
return df.A > 15
df.loc[select_rows(df), ['C', 'D']]
# 실행 결과
C D
c 20 21
참고 문서
데이터 사이언스 스쿨 - 4.3 데이터프레임 고급 인덱싱