dataFrame drop에 대한 간단한 코드 질문합니다 indexer is out-of-bounds
조회수 13597회
mydict = [{'inx':'i','a': 1, 'b': 2, 'c': 3, 'd': 4},
{'inx':'b','a': 100, 'b': 200, 'c': 300, 'd': 400},
{'inx':'k','a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
df = pd.DataFrame(mydict)
df.set_index(['inx'],inplace=True)
for i in range(len(df)):
if sum(df.iloc[i])<100:
df.drop([df.iloc[i].name],inplace = True)
df
이렇게 코드를 돌리면 아래 같은 에러가 납니다... 도저히 원인을 모르겠어요
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
if sum(df.iloc[i])<100:
이 부분에 대해서
indexer is out-of-bounds
라는 에러가 발생하는데요.iloc[i]
의i
가 범위를 넘는다는 말이죠.for 루프 안에서 drop 이 일어나서 df의 len 이 변경되는데, for 루프는 처음의 len 을 기준으로 돌다보니, 인덱스가 넘어가는 문제가 발생하는 겁니다.
-
윗분이 잘 설명해주셔서 저는 코드를 바꿔봤습니다.
mydict = [{'inx':'i','a': 1, 'b': 2, 'c': 3, 'd': 4}, {'inx':'b','a': 100, 'b': 200, 'c': 300, 'd': 400}, {'inx':'k','a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }] df = pd.DataFrame(mydict) df.set_index(['inx'],inplace=True) df = df.loc[df.sum(axis=1) >= 100]
아마 원하시는 결과랑 같을겁니다 .
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력