05_select_loc
| 7 Minute Read on Pandas
Data Assecss 메소드¶
Pandas에는 다음과 같은 data access 메소드 들이 있음 (정확히는 메소드가 아니고 Attribute 임)
- loc: Label 기반으로
- iloc: Index key(Integer Position) 기반으로
- ix:Label과 Index Key 혼합 기반으로
가장 사용이 많이 되는 메소드는 loc임
loc¶
- loc는 라벨 기반의 인덱싱 방법이다. loc은 라벨 기반이므로 행 및 열 라벨을 기반으로 행과 열을 지정해야 합니다
loc docs를 보면 기본적으로는 라벨 인덱싱지만, boolean 배열이 함께 사용될 수 있다라고 정의되어 있다
row lables, colomn labels로 허용되는 인풋은 다음과 같다.
- 'col1','col2', 'Boston' 같이 문자로 된 하나의 라벨
- 5, 2002 같이 같이 정수 된 하나의 바벨(정수로 된 라벨은 정수 인덱스와 다르기 때문에 사용에 주의)
- ['col1','col7','col11']와 같은 라벨의 리스트나 배열
- 'col1':'col4' 와 같이 라벨로 표현되는 slice 객체(col1':'col4'는 ['col1','col2','col3','col4']와 같은 의미임)
- boolean 배열
In [1]:
import pandas as pd
import numpy as np
data = np.random.randn(3,4)
index = [2000,2001,2002]
columns = ['Arizona','Boston', 'Chicago','Detroit']
df = pd.DataFrame(data, index = index, columns = columns)
loc 인풋으로 하나의 라벨만 입력되는 경우¶
In [2]:
# loc인풋으로 하나의 라벨만 입력되는 경우
df.loc[:,:] # -- 양쪽 아무런 라벨이 없으면 전체 조회 , ":" 를 전체 slicing 범위로 간주
df.loc[2002,'Arizona'] #행과 열에 모두 라벨이 붙어 있음, 하나의 값만 조회가 됨
print(df.loc[2002,'Arizona'])
df.loc[2002,:] #행에만 라벨이 붙어 있음
print(df.loc[2002,])
df.loc[:,'Boston'] #열에만 라벨이 붙어 있음
Out[2]:
loc 인풋으로 라벨의 리스트가 입력 되는 경우¶
In [3]:
# loc인풋으로 라벨의 리스트가 입력 되는 경우
df.loc[[2001,2002],['Arizona','Chicago']]
print(df.loc[[2001,2002],['Arizona','Chicago']] )
df.loc[:,['Arizona','Chicago']]
print(df.loc[[2001,2002],: ])
loc 인풋으로 라벨의 slice 객체 입력되는 경우¶
In [4]:
### loc인풋으로 라벨의 slice 객체 입력되는 경우
df.loc[2001:2003,'Arizona':'Chicago'] # 행, 열 모두 slice로 접근한는 경우
print(df.loc[2001:2003,'Arizona':'Chicago'])
df.loc[[2000,2002],'Arizona':'Chicago'] # 행은 리스트로, 열은 slice로 접근한는 경우
print(df.loc[[2000,2002],'Arizona':'Chicago'])
df.loc[2001:2003,['Arizona','Chicago']] # 행은 slice로, 열은 리스트로 접근한는 경우
print(df.loc[2001:2003,['Arizona','Chicago']])
In [5]:
df.loc[:,:] # --전체 조회
df.loc[:,'Arizona':'Chicago'] # --행은 전부, 열은 'Arizona'에서부터 'Chicago' 시카고 까지
df.loc[2001:2002,] # --행은 2001부터 2002, 열은 전부
df.loc[2001:2002,'Arizona':'Chicago'] # --행은 2001부터 2002, 열은 전부
Out[5]:
loc가 생략되는 경우¶
loc를 사용할 때 모든 행을 나타내고 하나의 컬럼 또는 복수의 컬럼 리스트를 사용할 경우에 간단히 DataFrame의 []에 컬럼 또는 컬럼리스트를 넣어 간단히 표현 할 수 있다.
In [6]:
df['Arizona'] #<--- df.loc[:,['Arizona']] 에서 loc와 :가 생략됨
print(df['Arizona'] )
df[['Arizona','Chicago']] #<--- df.loc[:,['Arizona','Chicago']] 에서 loc와 :가 생략됨
print(df[['Arizona','Chicago']] )
In [7]:
# index만 사용하고 컬럼을 생략할 수 있다.
df.loc[2000] #<---
print(df.loc[2000])
df.loc[2000,:]
Out[7]: