05_select_loc

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']                #열에만 라벨이 붙어 있음
-0.372951200691
Arizona   -0.372951
Boston    -0.092022
Chicago    0.022270
Detroit   -0.668257
Name: 2002, dtype: float64
Out[2]:
2000    0.299021
2001   -1.076186
2002   -0.092022
Name: Boston, dtype: float64

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],: ])
       Arizona   Chicago
2001 -0.430148  1.922663
2002 -0.372951  0.022270
       Arizona    Boston   Chicago   Detroit
2001 -0.430148 -1.076186  1.922663 -0.224411
2002 -0.372951 -0.092022  0.022270 -0.668257

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']]) 
       Arizona    Boston   Chicago
2001 -0.430148 -1.076186  1.922663
2002 -0.372951 -0.092022  0.022270
       Arizona    Boston   Chicago
2000  1.000116  0.299021 -1.919225
2002 -0.372951 -0.092022  0.022270
       Arizona   Chicago
2001 -0.430148  1.922663
2002 -0.372951  0.022270
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]:
ArizonaBostonChicago
2001-0.430148-1.0761861.922663
2002-0.372951-0.0920220.022270

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']] )
2000    1.000116
2001   -0.430148
2002   -0.372951
Name: Arizona, dtype: float64
       Arizona   Chicago
2000  1.000116 -1.919225
2001 -0.430148  1.922663
2002 -0.372951  0.022270
In [7]:
# index만 사용하고 컬럼을 생략할 수 있다. 
df.loc[2000]  #<---  
print(df.loc[2000])
df.loc[2000,:]
Arizona    1.000116
Boston     0.299021
Chicago   -1.919225
Detroit    0.798211
Name: 2000, dtype: float64
Out[7]:
Arizona    1.000116
Boston     0.299021
Chicago   -1.919225
Detroit    0.798211
Name: 2000, dtype: float64


© 2017. All rights reserved.

Powered by ZooFighter v0.12