pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html
파이썬 pandas 공식 문서를 활용하여 iloc를 정리해보려고 한다.
공식문서가 영어라 쉽지 않지만 그래도 하나씩 도전!!
Purely label-location based indexer for selection by label.
레이블별로 선택하기 위한 순수 레이블 위치 기반 인덱서입니다.
Purely integer-location based indexing for selection by position.
위치별 선택을 위한 순수 정수 위치 기반 인덱싱입니다.
차이가 보이는가!!
df.iloc[0] 과 df.iloc[ [0] ] 의 차이 말이다!
df.iloc[0] 은 첫번째 row인 값이 시리즈 형태로 세로로 펼쳐졌고,
df.iloc[ [0] ] 은 첫번째 row 인 값이 데이터프레임형태로 출력됐다.
즉 dataframe 형태로 변환하려면 [] 를 또 한번 해주면 된다.
헷갈려서 쥬피터노트북에서 각 데이터별 type을 확인해봤다. 역시 확인을 해야 속이 풀린다.
, 형태로 row 와 column을 구분해서 특정 스칼라 요소를 갖고오거나, 특정 행과 열이 겹치는 dataframe형태로 갖고오거나 할 수 있다!!! 컴마를 쓰는것을 확인하자!!
그리고 R Friend R_Friend 님 티스토리로부터 많은 도움을 받고 있다! 다시 한번 감사의 말씀을 올린다.
항상 헷갈리는 것이 iloc와 loc!!! 아무리 봐도 헷갈린다.
결론부터 말하면 loc나 iloc 모두 행단위 데이터를 출력한다는 것이다!!
loc : index가 문자인 경우 , iloc : index 가 정수인 경우!! 둘다 결과값은 동일하다!!
index label을 가지고 행(row) 선택할 때는 df.loc['xx'] 를 사용합니다.
In [42]: df Out[42]: C1 C2 C3
In [48]: df.loc['R1'] Out[48]: C1 0.0
In [49]: df.loc[['R1', 'R2']] Out[49]: C1 C2 C3 |
출처: https://rfriend.tistory.com/282 [R, Python 분석과 프로그래밍의 친구 (by R Friend)]
첫번째 케이스에서 df.loc['R1'] 은 index가 'R1' 인 row를 선택해서 series 형태로 보여준다.
잠시 헷갈렸으나, 가로로 row data였던것이 세로로 전치되게 나타났다.
두번째 케이스에서 df.loc[['R1','R2'] ] 는 row index가 'R1','R2' 인 것만 뽑아서 2행3열 dataframe으로 나타냈다.
index의 label 이 아니라 정수(integer)로 indexing을 하려면 df.iloc[int] 를 사용해야 합니다. 만약 df.loc[int]를 사용하면 TypeError 가 발생합니다.
# TypeError: cannot do label indexing on with these indexers [0] of <class 'int'> In [50]: df.loc[0] # TypeError TypeError: cannot do label indexing on <class 'pandas.indexes.base.Index'> with these indexers [0] of <class 'int'>
# Select row by interger location : df.iloc[loc] In [51]: df.iloc[0] Out[51]: C1 0.0
In [52]: df.iloc[0:2] Out[52]: C1 C2 C3 |
출처: https://rfriend.tistory.com/282 [R, Python 분석과 프로그래밍의 친구 (by R Friend)]
첫번째 케이스에서 df.iloc[0] 은 index가 'R1' 인 row를 선택한 결과와 동일하지만 문자 index를 사용하지 않고
정수 인덱싱을 사용한것이다.
df.iloc[0] 의 결과값 = df.loc['R1'] 의 결과값!,
시리즈 형태 데이터로 마찬가지로 가로로 row data였던것이 세로로 전치되게 나타났다.
두번째 케이스에서 df.loc[['R1','R2'] ] = df.iloc[0:2] 의 결과값이 모두 동일하다!
즉. 문자 index를 사용하려면 loc, 정수 index를 사용하려면 iloc 이고 둘다 행단위의 데이터를 출력한다.
DataFrame의 행(row) indexing할 때 df[0:2] 처럼 행의 범위를 ':'로 설정해주어도 됩니다. df[0] 처럼 정수값을 지정하면 KeyError 납니다(이때는 df.iloc[0] 을 써야 함).
# KeyError: 0 In [53]: df[0] # KeyError: 0KeyError: 0
# Select rows : df[0:2] In [54]: df[0:2] Out[54]: C1 C2 C3
|
또 놀라운 사실은 df[0:2] 로 행을 순서대로 상위 2개만 선택할 수 있다는 것이다!!
즉, df.loc['R1','R2'] = =df.iloc[0:2] = df[0:2] 모두 동일한 결과값이 나온다는 것이다!!
그럼 row를 선택할때 무엇을 사용해야 가장 편할까??
출처: https://rfriend.tistory.com/282 [R, Python 분석과 프로그래밍의 친구 (by R Friend)]
'「python초짜에서 중급으로!' 카테고리의 다른 글
[DAY1] 쥬피터 노트북 환경설정 (0) | 2023.02.01 |
---|---|
07. dataframe에서 특정 columns 선택하기 (0) | 2021.01.31 |
05.anaconda에서 라이브러리 설치하기 (0) | 2020.11.30 |
04. Jupyter nbextensions 로 목차 기능 사용하기 (0) | 2020.11.04 |
03. ANACONDA 초기 폴더 설정하기 (1) | 2020.11.03 |
댓글