[Python] SettingWithCopyWarning 원인

조재훈·2020년 12월 28일
0
post-thumbnail

판다스로 데이터 수정하는걸 배우고 있는데 지난주에 토론 소모임에서 얘기했던 주제가 생각이 나서 혼자 프로젝트를 해보는 중이다.
해당 프로젝트에 대한 포스팅은 나중에 하고...

데이터를 추출해서 새로운 열(열 이름은 '비율' 이다) 을 추가하려고 하는데 자꾸 이상한 에러가 뜬다.

ipython-input-128-6161fabc011c:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df_geoje['비율'] = df_geoje['2020 1/2']

o_o ...
뭘까 이게...

근데 복사한 데이터를 출력해보면 또 제대로 수정이 되어있다.

흠....

모르면 역시 인터넷이지.

마침 딱 가려운 부분을 긁어주는 좋은 블로그에서 답을 찾았다.

https://emilkwak.github.io/pandas-dataframe-settingwithcopywarning

이유인 즉슨, 사진에 있는 df_geoje가 전체 df중 일부만 복사해온건데, 이거를 수정할 경우 복사본만 수정할지, 원본도 수정할지 알 수가 없어서 저런 경고를 보내는 것이라고 한다.

따라서 df.copy() 하는 식으로 따로 복사본을 분리해서 생성하면 해당 경고가 사라지게 된다.

그냥 df1에서 긁어오는게 아니라 df1.copy()를 해서 원본과 분리를 했더니 정말 경고가 사라지고 깔끔하게 나왔다.

덕분에 좀 지체되긴 했지만 이렇게 몰랐던걸 해결해나가는 재미가 또 있다.

야호~~

profile
맨땅에 헤딩. 인생은 실전.

0개의 댓글