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]
    

    아마 원하시는 결과랑 같을겁니다 .

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)