1. DataFrame은 필터링을 하고 다른 곳에 담아도 원본 index를 보존한다.

df_edit = df[df['col0'].str.contains(item)]

이런 식으로 필터를 걸어 할당했다 하더라도, 원래 df에 있던 index를 가져온다.

따라서 len(df_edit) > 0 이라도 df_edit['col0'][0]은 못 불러올 수 있다.

idx    col0

13    "test"

print 해보면 이런 식으로 기존 index가 남아있음을 알 수 있다.

df 자체에서 .head()나 .tail() 로 개수를 가져올 수는 있겠지만 첫번째 줄에 있는 col0의 값을 가져오려면 

index를 reset해야 한다. (혹시나 다른 방법이 있다면 댓글 부탁드린다.)

df_edit = df[df['col0'].str.contains(item)].reset_index()

그러면 하기와 같이 바뀌게 된다.

idx    col0

0    "test"

2. Dataframe은 index열을 필요로 한다.

dictionary를 dataframe으로 convert하는 경우는 자연스럽게 생긴다.

따라서 엑셀을 dataframe 형태로 읽는데 pk값에 해당하는 int열이 없다면, index=false를 항상 줘야 한다.

df = wb.sheets(1).used_range.options(pd.DataFrame, index=False).value

안 그러면 다른 열을 index열로 바꿔버려 정합성이 맞지 않는 경우가 생긴다.

 

+ Recent posts