[pandas] 2-2. loc와 iloc 차이와 사용방법
🖇 이전 글
02. iloc
iloc는 integer location의 약어로, 데이터 프레임의 행이나 칼럼의 순서를 나타내는 정수로 특정 값을 추출해오는 방법이다. loc는 칼럼명을 직접 적거나 특정 조건식을 써줌으로써 사람이 읽기 좋은 방법으로 데이터에 접근하는 방법이었다면, iloc는 컴퓨터가 읽기 좋은 방법으로(숫자로) 데이터가 있는 위치(순서)에 접근한다고 생각하면 쉬울 것이다.
〰️iloc 사용방법
df.iloc[행 인덱스, 열 인덱스]
먼저 하나의 데이터 프레임을 불러온다.
이전 게시물에서 df1.loc[0] 은 '전체 데이터 프레임에서 인덱스 이름이 0인 행만 추출해줘'라는 의미였다면, df1.iloc[0] 는 '전체 데이터 프레임에서 0번째 행에 있는 값들만 추출해라'라는 의미가 된다.
이번에는 위의 빨간 네모 박스 안에 있는 특정 값을 iloc를 이용하여 추출해보자. 해당 값은 '0번 행, 2번 칼럼'에 위치한 값이다.
따라서 이번에는 df1.iloc[0,2] 로 작성해주면 된다. 결과를 출력해보면 우리가 원하는 값이 출력되었음을 알 수 있다.
이번에는 빨간색으로 표시한 구간을 iloc를 이용하여 값을 추출해보자. 해당 값은 5번째까지의 행, 5번째까지의 열로 범위를 지정할 수 있을 것이다.
따라서 df1.iloc[:5, :5] 로 작성해주면 된다. df1.loc[5]처럼 인덱스로 콕 집을 때는 해당되는 인덱스를 적으면 되었지만,
df1.loc[:5]처럼 슬라이싱으로 범위를 지정해줄 때는 마지막에 쓴 숫자 전까지 출력해라 라는 의미라는 것을 명심하자.(항상 0부터 카운트한다는 것도 명심)
iloc의 이러한 특성을 이용하여 특정 조건의 행 또는 열만 추출해보자.
전체 행 중에 짝수번째에 위치한 행들만 추출하고 싶다면 df1.iloc[::2, :] 으로 작성해주면 된다. 즉, '데이터 프레임 df1에서 전체 값 중, 2 간격으로 추출하고 , 열은 전체 추출하라'라는 의미이다. (해당 방법은 칼럼 추출 시에도 동일한 방법으로 활용하면 된다.)
📌 주의사항
ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types
iloc에는 정수(int)값만 들어가야함에도 불구하고 문자열로 값을 입력하게 되면 에러가 뜬다.