pandas의 “rowwise” filter : loc vs iloc

Published by onesixx on

loc

get

  • df.loc[[“index명”]]
  • df.loc[ condition, “col명”]

set

  • df.loc[0] = [val1, val2]
  • df.loc[len(df)] = {‘col1’: ‘val1’, ‘col2’: ‘val2’}

연산 기준

  • Serise는 index기준
  • Dataframe는 columns 기준

조회방법

  • 컬럼명 df[ [“col1”, “col2”] ]
  • loc, iloc loc[ rowindex, ]
    loc[ rowindex, [“col1”, “col2”]]
    iloc[ 0:3, 1:6 ]
  • indexing활용

예제 df

df = pd.DataFrame([
    [ 1,  2,  3,  4,  5],
    [ 6,  7,  8,  9, 10],
    [11, 12, 13, 14, 15],
    [16, 17, 18, 19, 20]
], index = ['ridx1', 'ridx2', 'ridx3', 'ridx4'],
   columns=['colNm1', 'colNm2', 'colNm3', 'colNm4', 'colNm5'])

dataFrame에 대한 행 / 열/ filtering

loc

df.loc[['ridx1']]         # DataFrame 
df.loc[['ridx1'],]
df.loc[['ridx1'],:]

df.loc[['ridx1', 'ridx2']]
df.loc[['ridx1','ridx2'], ]
df.loc[['ridx1', 'ridx2'], :]  #same above

iloc

df.iloc[[0]]        # DataFrame 

df.iloc[[0,1]]
df.iloc[[0,1], :]

[ ] 특이한 케이스

df[0:2]  #0부터 시작하는 숫자 ..
df.iloc[[0,1,2]]
≈

df[0,1] ERROR

loc : index이름

iloc : index가 아닌 번호

0 1 2 3 4
0
1
2
3

행열 DataFrame

loc

df.loc[['ridx2', 'ridx3'], ['colNm3', 'colNm4']]

iloc

df.iloc[[1,2], [2,3]]

df[[‘col1’, ‘col2’]]

df.filter(regex=””)

loc

df.loc[: , ['colNm1', 'colNm2']] 

iloc

df.iloc[:, [0,1]]

[ ] 특이한 케이스.

df[ 'colNm1'] 의 확장 (Series의 확장)

df[['colNm1', 'colNm2']]   

df.filter(items=['colNm1','colNm2'])
df.filter(like='colNm', axis=1)

오류

df['colNm1', 'colNm2']   # X  문법틀림

df.loc['ridx1', 'ridx2'] # 2개이상은 []로 묶지 않으면 오류

Difference between iloc and loc

https://kongdols-room.tistory.com/112
loc (location) iloc (integer location)
이름location, 레이블인덱싱 integer location 포지션인덱싱
추출기준 행또는열의 label이나 boolean array로
(사람이 읽을수 있는 라벨값, 특정조건식 으로)
행또는열의 순서를 나타내는 정수로
( 컴퓨터가 읽기좋은 숫자, 위치순서로)
df.loc[행인덱싱값, 열인덱싱값]df.iloc[행인덱스, 열인덱스]
부울 인덱싱사용가능불가능
값하나 행하나
(df.loc[0] 인덱스이름이 0인행만)
범위의 두 끝점을 모두 포함Python 슬라이싱 규칙을 사용

Series (cf. dataFrame)에 대한 filtering

행 Series (cf. dataFrame)

pandas.core.frame.DataFrame 이 아닌 pandas.core.series.Series

loc 라벨

df.loc['ridx1']  # pandas.core.series.Series

iloc 순서정수

df.iloc[0]  # pandas.core.series.Series

colNm1 1
colNm2 2
colNm3 3
colNm4 4
colNm5 5
Name: ridx1, dtype: int64

열 Series

loc 라벨

df.loc[:, 'colNm1']

df.loc[:, ['colNm1']] => dataframe

iloc 순서정수

df.iloc[:, 0]

df['colNm1']
df.colNm1      # same above

ridx1 1
ridx2 6
ridx3 11
ridx4 16
Name: colNm1, dtype: int64

오류

df['ridx1']              # X .loc없이 row라벨은 안됨
df['ridx1', 'ridx2']     # X

df[['ridx1']]            # X
df[['ridx1', 'ridx2']]   # X

loc 검색

df.loc[['ridx3', 'ridx4'], ['colNm1', 'colNm2', 'colNm3', 'colNm4', 'colNm5']]


df.loc[df['colNm1']>6]
        
df.loc[[False, False, True, True]]
df.loc[[False, False, True, True], :] 
df.iloc[[False, False, True, True]]
df.iloc[[False, False, True, True], :] 
        
df.loc[df['colNm1'].isin([11,16])]
df.loc[ df['colNm1'].isin([11,16]), : ]
        
df.loc[(df['colNm1'].isin([6,11,16])) & (df['colNm4']>10)]

Categories: pandas

onesixx

Blog Owner

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x