iloc loc Value Error 정리
아래래의 남북한 발전 전력량 데이터에서 전력량 컬럼은 남한과 북한만, 연도 컬럼들은 1990부터 2016까지만 담은 데이터프레임을 만들고자 한다.
iloc를 사용 데이터프레임을 슬라이싱하고 인덱스 이름을 South와 North로 새로 지정했다.
df_ns = df.iloc[:6, 2:] 라는 코드로도 가능하지 않을까? 라는 생각에 코드를 작동시켰더니
ValueError: Length mismatch: Expected axis has 6 elements, new values have 2 elements
라는 오류가 발생했다.
예상 축에는 6개 요소가 있지만 새 값에는 2개 요소가 있다는 뜻으로, 불러온 인덱스의 수와 지정한 인덱스 이름의 수가 달라서 발생한 오류이다.
이 오류가 발생했다면 불러온 인덱스(혹은 컬럼)과 새로 지정할 인덱스(혹은 컬럼)의 이름 수를 일치시켜주면 해결된다.
그런데 남한과 북한 2개 요소만 가져오려고 작성한 코드가 왜 6개 요소를 반환했을까?
새로 작성한 df.iloc[:6, 2:]는 행은 0부터 6까지, 컬럼은 2부터 끝까지 가져온다.
기존 df.iloc[[0, 5], 2:]는 행은 0과 5를 하나씩, 컬럼은 2부터 끝까지 가져온다.
같은 값을 가져오는 코드라고 생각했으나 전혀 다른 내용의 코드였다.
만약 다른 코드로 같은 데이터를 반환하고 싶다면
라고 작성할 수 있다. loc는 iloc와 달리 인덱스나 컬럼의 값을 지정해 데이터를 슬라이싱한다.
기존 데이터프레임은 정수형 숫자 인덱스를 가지고 있으므로 행은 [0, 5]로 지정, 컬럼은 값 '1990':으로 지정했다.
loc는 작성한 시작값과 끝값을 그대로 불러오고, iloc는 끝값-1을 불러오는 것을 잊지 말자.