Python/Debugging

Python Pandas에서 발생하는 KeyError: 0 해결법

jimmy_AI 2022. 6. 14. 22:29
반응형

파이썬 판다스 KeyError: 0 오류 디버깅

파이썬의 pandas 모듈에서 인덱싱 과정에서 발생하기 쉬운

KeyError 종류에 대하여 예상 원인과 이에 대한 해결법을 다루어보도록 하겠습니다.

 

 

Case 1 : 열 이름 위치에 인덱스 번호를 대신 입력하는 경우 -> loc 함수 사용

아래와 같은 데이터프레임 df에 대하여 0번 인덱스 행을 가져오는 상황을 가정하겠습니다.

 

여기서 다음과 같이 인덱싱을 시도하면 KeyError: 0이 발생하게 됩니다.

df[0] # KeyError: 0 발생

# 가능한 경우(열 이름만 가능)
df['A']
df['B']

이는 컬럼 이름이 들어가야할 자리에 인덱스 번호가 대신 들어간 상태이고,

0이라는 이름을 가진 열은 존재하지 않기에 해당 에러가 발생한 것입니다.

 

여기서는 loc 함수를 사용하여 인덱스 번호로 인덱싱을 한다는 것을 명시해주면

위에서 발생하는 오류를 방지할 수 있습니다.

df.loc[0]

# 0번 인덱스 행 정상적으로 반환
A    1
B    6
Name: 가, dtype: int64

 

반응형

 

Case 2 : 해당하는 인덱스 값이 존재하지 않는 경우 -> iloc 함수 사용

이번에는 df에서 Case 1과는 다르게 아래와 같이 인덱스가 지정되었다고 가정하겠습니다.

 

여기서 Case 1처럼 loc 함수를 적용할 때, 0을 input으로 넣어서 시도하면

0이라는 인덱스가 존재하지 않기에 KeyError: 0이 발생할 수 있습니다.

df.loc[0] # KeyError: 0 발생

# 가능한 경우(실제 인덱스 이름)
df.loc['가']
#'나', '다', '라'도 가능...#
df.loc['마']

해당 케이스에서는 loc을 이용할 경우 존재하지 않는 인덱스 값인 0 대신

인덱스로 지정된 '가', '나' 등의 이름을 사용해야 합니다.

 

이럴 때, 인덱스 번호 대신 순서의 위치 번호로 인덱싱을 진행하고 싶다면

loc 대신 iloc 함수를 사용하면 오류가 발생하지 않습니다.

df.iloc[0]

# 0번 위치의 인덱스 행 정상적으로 반환
A    1
B    6
Name: 가, dtype: int64