Coding/Python / loc, iloc, at, iat.md

loc, iloc, at, iat

조회

Pandas를 쓰시는 분들이라면 한번쯤 보셨… 아냐 이건 한번 본 정도가 아니라 판다스 만질 일 있으면 엄청 써보는거임… 특히 저 앞에 두개요. 진짜 엄청 써봅니다. 근데 둘이 무슨 차이인지 모르시겠다고? 그럼 잘 오셨음.


시리즈, 그리고 데이터프레임

시리즈가 모이면 데이터프레임이 된다는 건 아실것이다. 그 대충 문발 생각하시면 된다. 구슬을 꿰어서 세로로 한 줄(시리즈)을 만들고, 그걸 가로로 엮어서 문발(데이터프레임)을 만든다. 그리고 저 네개를 데이터프레임에서 뭐 찾을 때 쓰는데 어떨 때 쓰느냐…

loc, iloc

이 두개는 데이터프레임에서 행단위로 찝을 때 사용한다. 그니까 저걸 쓰면 어떻게 나오냐... 그 비즈 문발 보시면 세로로 꿴 구슬을 가로로 엮어서 2차원 평면을 만들잖아요? 그 문발을 보면 구슬에 순서가 있지 않습니까? 그치 그 구슬을 가로로 한 줄 갖고온다 이거지. 근데 왜 두개씩이나 있냐고요?

 

loc은 주소(인덱스) 기반으로 가고 iloc은 순서 기반으로 간다. 쉽게 설명하자면 내가 친구 집을 찾아갈 때 얘 집이 무슨로 몇번이더라… 하면서 주소로 찾아가는건 loc, 얘네 집이 이 골목에서 몇번째였더라…로 찾아가는 건 iloc라고 보시면 된다. 이건 사실 데이터프레임의 인덱스가 숫자면 그렇게 크게 체감은 안 되는데, 인덱스가 숫자가 아니라 A, B, C 뭐 이런거면 차이가 확 드러난다. 사실 인덱스가 1부터 시작할때도 차이가 체감되긴 함.

 

df = pd.read_csv('data/Imatinib.csv', sep=";")
df.index = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N']

저거 켐블에서 갖고온거라 구분자가 콤마가 아님... 아무튼 좀 짤똥한 놈으로 가져와서 인덱스를 알파벳으로 줬다. 그러니까 저 인덱스가 각 행의 주소다 이 얘기.

 

df.loc['A']
df.iloc[0]

뭐여 저거 왜저래요? loc은 주소 갖고 찾아가는거니까 찾아갈 행의 인덱스를 그대로 입력해야 한다. 그리고 iloc을 쓸 때는 리스트나 튜플같은 줄줄이 소시지들 인덱싱하듯이 0부터 시작하면 된다. 그러니까 저 둘이 같은 결과를 출력한다 이 얘기.

 

display(df.loc['A':'D'])
display(df.iloc[0:3])

슬라이싱 할 때도 다르다. 어떻게요? 일단 결과를 보자.

 

위가 loc, 아래가 iloc다. loc는 여기서부터 여기까지 찾아달라고 하면 진짜 토씨 하나 안 틀리고 여기서부터 여기까지 찾아주는데 iloc은 range처럼 뭐 이상 뭐 미만으로 들어간다. iloc는 그래서 한줄 없죠?

 

at, iat

이건 따로 공부하다가 알게 된 건데, 차이점은 loc iloc와 같지만 loc iloc가 가로축 보는 애면 저 둘은 좌표 찍는 애다. 예? 먼 소리예요?

 

display(df.at['E','Name'])
display(df.iat[4,1])

잘 보면 loc이랑 달리 쟤는 두 개가 들어가죠? 그게 행이랑 칼럼이다. 가로세로. 근데 at은 인덱스랑 칼럼명으로 찍는거고 iat은 x, y 찍듯이 순서값으로 찍는거다. 그렇게 해서 행과 칼럼이 교차하는 곳의 값을 찝어낸다고 보시면 된다. ㅇㅋ? ㅇㅇㅋ

 

아니 근데! 저 디스플레이 뭐예여! 나 지금 jupyter notebook 쓰는중임… 주피터에서 저거 쓰면 표가 진짜 깔쌈하게 나온다. 나는 py파일에서는 print쓰고 주피터에서는 어지간하면 디스플레이 씀.

댓글

홈으로 돌아가기

검색 결과

"search" 검색 결과입니다.