본문 바로가기
DATA

iloc과 loc의 차이점, iloc 시 행이 한 개만 선택되는 문제

by 이호수 2024. 11. 28.

코드

# 데이터 2개로 분리
df1 = df.iloc[:30,] # 0~30행 데이터
df2 = df.iloc[31:60,] # 31~60행 데이터

print(df1.shape, df2.shape)
  • 원했던 출력
    (31, 5) (30, 5)
  • 나온 출력
    (30, 12) (1, 12)
    다음과 같은 코드에서 슬라이싱이 제대로 되지 않는 문제가 발생했다.

내가 원래 알고 있던 내용은 아래와 같았다.

iloc vs loc

  1. iloc (Index Location)
  • 숫자 기반 인덱싱
  • 슬라이싱 시 여느 파이썬 코드처럼 start는 포함, end는 제외
  1. loc (Label Location)
  • 라벨 기반 슬라이싱 (라벨 명칭 기반)
  • 슬라이싱 시 start, end 모두 포함

검색과 다른 코드에 적용하며 원래 알고 있던 내용이 맞다는 것을 확인했다.
그럼 왜 df2에서 하나의 행만 슬라이싱이 된걸까?
다른 숫자로도 실험해봤는데, 무조건 행이 1로만 나왔다.

 

여러 시행착오를 반복하다가, 마지막으로 데이터의 크기를 확인해보았다.

다시 df.info()를 찍어보니, 데이터가 32개 밖에 없었다.
데이터프레임의 행이 iloc문의 end인 60개보다 적었기 때문에 iloc[31:60]의 범위가 유효하지 않았고,
이로 인해 특정 행만 남아 (1, 12)처럼 표시된 것이었다.

 

 

| 데이터 프레임의 형태를 잘 확인하자!!!
초기에 한번만 확인했는데, 수시로 확인해야겠다고 깨닫게 된 계기가 되었다.