본문 바로가기
인공지능

SettingWithCopyWarning:

by 녤 2023. 4. 7.

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

 

다음과 같은 경고가 떴다. 처음에는 찾아봐도 무슨 말인지 모르겠어서 한참을 고민했다.

 

이 오류는 파생 dataframe에 수정이 가해져서 발생하는 오류라고 한다. 생각해보니까 data가 df의 파생 dataframe이고, 지금 genre를 원핫인코딩한 값으로 바꾸니까 파생 dataframe이 수정되는게 맞았다... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

이런 경우 원본 dataframe을 완전히 복사하여 독립적인 dataframe을 만드는 것이 안전하다고 한다. 

 

https://devpouch.tistory.com/153

 

[pandas] SettingWithCopyWarning 경고 끄기

pandas에서 코드를 실행하던 중 아래와 같은 에러를 만났다. /root/test/venv/lib/python3.7/site-packages/pandas/core/series.py:1056: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats

devpouch.tistory.com

 

 

그래서 그냥 data를 완전 복제 하기로 했다. ^~^

 

완전 복제와 얕은 복제가 뭐지? 할 수 있는데, 생각해보니 자바에서 배웠더라고

 

a = b 가 얕은 복제이고

a= b.copy() 이러면 완전 복제이다

 

#data = df.dropna(subset=['rating', 'score', 'votes', 'budget', 'gross', 'runtime'])
data = df.dropna(subset=['rating', 'score', 'votes', 'budget', 'gross', 'runtime']).copy()

주석처리가 원래 코드이고, 아래가 바꾼 코드이다. 

'

오류가 해결 되었다 >~<

 

https://mizykk.tistory.com/63

 

[Python] df.copy() :: 복사본 만들기 / 얕은복사 & 깊은 복사

판다스에는 데이터프레임의 복사본을 만들어주는 pandas.DataFrame.copy가 있다. 이는 a = b와는 다른 방식의 복사이다. a = b는 원본 데이터가 변하면 똑같이 변하는 얕은 복사인 반면, pandas.DataFrame.copy

mizykk.tistory.com

 

'인공지능' 카테고리의 다른 글

KeyError: "[....] not in index"  (0) 2023.04.06