[DataFrame] SettingWithCopyWarning: shallow copy vs deep copy

Oni·2023년 4월 17일
0

python

목록 보기
1/5

판다스에서 데이터프레임을 전처리하다보면 다음과 같은 경고 메시지가 종종 발생한다.

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

df[['A','B']]와 df.loc[:,['A','B']]는 뭐가 다른걸까? 왜 loc메서드를 사용하라고 하는걸까?

두 방법은 모두 shallow copy이다.
원본 데이터프레임에서 추출하여 생성한 데이터프레임(복사본이라고 지칭)에서 값을 변경하려고 할 때 변경 내용 적용범위에 대한 충돌이 발생할 수 있음을 경고하는 것이다.

가장 단순한 방법은 deepcopy를 하여 복사본을 '새로운 원본'으로 취급해주는 것이다.


알아야할 관련 개념 : shallow copy vs deep copy

shallow copy : 원본과 복사본이 동일한 메모리 공간 공유 -> 원본 변경시 복사본도 변경
deep copy : deep copy는 내부 객체까지 copy되어 원본과 복사본은 서로 다른 메모리 공간 참조 -> 원본과 상관x. 독립적


관련 추천 사이트

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

profile
데이터 분석/엔지니어링/ML에 관한 기록

0개의 댓글