본문 바로가기
자격증/[빅분기] 빅데이터분석기사

[작업형1] 판다스 loc, iloc 개념 및 에러정리

by 바다의 공간 2024. 10. 1.

loc, iloc 둘 다 모두 인덱싱을 위한 것인데

loc는 라벨을 기반으로 하는 인덱싱 번호입니다

예를들어서 행 이름이나 열 이름을 사용할떄 쓰입니다.

data = {
    "메뉴":['아메리카노','카페라떼','카페모카', '바닐라라떼', '녹차', '초코라떼', '바닐라콜드브루'],
    "가격":[4100, 4600, 4600, 5100, 4100, 5000, 5100],
    "할인율":[0.5, 0.1, 0.2, 0.3, 0, 0, 0],
    "칼로리":[10, 180, 420, 320, 20, 500, 400],
}
data = pd.DataFrame(data)
data.to_csv('data.csv', index=False)

를 가정한다고 하면 판다스로 표가 그려지겠죠

 

  메뉴 가격 할인율 칼로리
0 아메리카노 4100 0.5 10
1 카페라떼 4600 0.1 180
2 카페모카 4600 0.2 420
3 바닐라라떼 5100 0.3 320
4 녹차 4100 0.0 20
5 초코라떼 5000 0.0 500
6 바닐라콜드브루 5100 0.0 400

이런식으로 되겠죠

여기서 loc를 사용하려면

 df.loc[열(row), 행(column)] 을 사용하면 됩니다.

예를들어서 내가 녹차의 할인율이 궁금하다?

df.loc[4, '할인율']

0.0% 인것을 확인할 수 있습니다.

 

아메리카노 자체가 궁금하다?

df.loc[0]

이렇게 나옵니다.


여기서 만약에 내가 카페모카의 메뉴와 가격을 둘 다 보고싶다면?

df.loc[2, '메뉴', '가격']을 했는데 자꾸 에러가 발생 했습니다.

아니 2열에있는 메뉴와 가격을 보고싶은건데 왜? 자꾸? 에러지? 하고보니 

인덱스가 많대요 그럼 인덱스가 1개라는건데..

그래서 각 1개씩 나올 수 있게 2줄로 작성을 해주었습니다.

df.loc[2, '메뉴']
df.loc[2, '가격']

결과는 4600

에러는 뜨지않았지만 내가 원하는 결과값이 아니죠.

 

슬라이싱이라는 카테고린데 왜 하나씩 썼지? 라는생각으로 

df.loc[2, '메뉴':'가격']

로 다시 작성했는데 

잘 나옵니다.


공부한 점

- str의 형태도 :(슬라이싱)을 사용할 수 있다.

사실 뭔가 한글이고 문자라서 어색하게 느껴졌는데 가능하다는것을 알게되었습니다.


iloc는 위치기반 인덱싱 입니다.

데이터프레임의 정수 인덱스 위치를 사용해요

 

행, 열 순서에 따라서 선택하고 0부터 시작하는 숫자를 사용합니다.

아! 그리고 여기서 loc, iloc 주의할점이있는데

lic는 마지막을 포함하고 iloc에서는 슬라이싱 마지막을 포함하지 않습니다!!!!! <<이건 내가 많이 틀릴거같아서

잘 숙지해두려고 합니다.

 

다시 예시로

라는 표가 있다고 하고

카페모카, 메뉴,가격을 알고싶을때 iloc를 써서

df.iloc[2, 0:3]

이렇게 원하는 데이터를 뽑아낼 수 있습니다.

 

그리고 카페라떼와 카페모카의 전체를 보고싶다면

df.iloc[1:3, :]

: (전체를 뜻함)을 가져올 수 있습니다.

위에서 언급했듯이 iloc는 슬라이싱의 맨 마지막을 포함하지 않습니다~


그림으로 그려보자면

 


 

 

https://www.datamanim.com/dataset/99_pandas/pandasMain.html

 

판다스 연습 튜토리얼 — DataManim

판다스 연습 튜토리얼 9회 빅분기 실기 대비 강의, 블로그만으로는 도저히 안되겠다ㅠ 하시는분들에게 추천합니다. 아 제발 광고 한번씩만 눌러주세요 ㅠㅠ 두번은 더 좋구요 빅분기, adp 정보공

www.datamanim.com