loc인덱싱은 판다스에서 데이터프레임을 인덱싱과 슬라이싱하는 방법입니다
파이썬의 리스트에서 list[0] 혹은 list[1:5] 와 같이 인덱싱과 슬라이싱을 하는데
마찬가지로 데이터프레임도 인덱싱과 슬라이싱을 할수 있는겁니다
다만 리스트에서 위치(인덱스)로 인덱싱했던 것과는 달리
데이터프레임은 레이블이 붙어있는 구조라서 레이블로 인덱싱을 할수있는데 그게 바로 loc인덱싱 입니다
또한 데이터프레임은 2차원이기때문에
[ , ] 대괄호안에 콤마로 구분해서 각각의 차원의 인덱싱을 2차원 평면의 (x, y) 좌표처럼 설정합니다
df.loc[행레이블, 열레이블]
loc 인덱싱은 대상이 단수면 "레이블1"로 가능하고 복수면 ["레이블1", "레이블2",..,"레이블n] 같은 리스트 형식으로 가능합니다
슬라이싱은 "시작레이블": "끝레이블" 로 가능하며 시작레이블과 끝레이블의 두 경계는 모두 포함됩니다
예시를 보시면 이해가 더욱 편하실겁니다
예
import pandas as pd
df = pd.DataFrame([[81, 94, 79, 80],[71, 62, 77, 78],[71, 75, 95, 99]],
index=['송중기', '김나현', '박효신'],
columns=['국어', '수학', "영어", "과학"])
이 df를 아래의 loc 인덱싱 결과와 비교해보면 됩니다
1. 송중기 행을 인덱싱
df.loc['송중기']
[ , ] 없이 하나만 입력하면 디폴트는 행의 인덱싱입니다 행의 레이블이 index가 "송중기"인 행이 시리즈로 출력된겁니다
그림으로 표현하면 아래와 같습니다
시리즈는 축이 없기때문에 모든 시리즈는 세로 방향으로 세워졌습니다.
다만 보기에만 그런거지 시리즈는 열이든 행이든 모두 될수있습니다
df의 columns가 df.loc["송중기"] 에서는 index가 됩니다.
df.loc["송중기"] 는 시리즈라서 columns는 없습니다
2. 송중기와 박효신의 복수의 행을 인덱싱
df.loc[['송중기', '박효신']]
행을 송중기와 박효신의 복수로 인덱싱한것입니다.
그래서 결과도 데이터프레임이 되었네요
데이터프레임은 리스트와 달리 복수의 인덱싱을 동시에 할수있는데 복수의 인덱싱은 리스트 형식으로 넣어야합니다.
고로 대괄호 안에 다시 대괄호가 들어가는 구조가 됩니다
3. 행과 열 모두 인덱싱
df.loc['송중기', '국어']
81
행과 열을 모두 인덱싱 하였습니다 고로 해당 값만 나오게됩니다
4. 행은 슬라이싱 열은 인덱싱
df.loc['송중기':'김나현', '국어']
행을 슬라이싱 열은 인덱싱을 했습니다. 그래서 결과는 시리즈
그림으로 표현하면 아래와 같습니다
5. 행, 열 모두 슬라이싱
df.loc["송중기":"김나현", "국어":"영어"]
결과는 행은 송중기에서 김나현까지, 열은 국어에서 영어까지 잘려진데이터프레임입니다
관련 공식문서
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html
loc 관련 강의
'판다스 > 함수 cheat sheet' 카테고리의 다른 글
[pandas] sort_values (0) | 2022.12.30 |
---|---|
[pandas] merge_asof (0) | 2022.12.29 |
[pandas] merge (0) | 2022.12.29 |
[pandas] read_excel (0) | 2022.12.29 |
[pandas] #02 iloc 인덱싱 (0) | 2022.02.19 |