파이썬 판다스 SettingWithCopyWarning 에러 해결하기

판다스 작업 중에 아래처럼 에러가 나는 경우가 있는데요.

Warning (from warnings module):
  File "C:\python\lib\site-packages\pandas\util\_decorators.py", line 311
    return func(*args, **kwargs)
SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

문제 발생 원인

이 문제는 데이터 프레임이 연결되어 할당되었기 때문에 발생한 오류입니다.

 

즉, 기존 df를 슬라이싱한 데이터 프레임에서 작업 중이므로 수행하는 모든 작업이

 

원본 DataFrame에 반영되어 수정되기 때문입니다.

 

아래처럼 mask를 입혀서 슬라이싱 해서 사용중인 df1이 있는데요.

 

이 df1에 대한 수정을 하면 df에도 수정이 되어야 하기 때문에 나타납니다.

 

mask = (df['date'] >= dt_last)
df1 = df.loc[mask]

이 때에는 df.loc[mask].copy() 명령어를 통해서 복사해주어야 합니다.

 

단순히 copy()를 해서 새롭게 메모리를 할당함으로써 해당 문제를 해결할 수 있습니다.

즉 위를 아래와 같이 수정하여 수정코드로 입력해야지 에러가 나지 않습니다.

mask = (df['date'] >= dt_last)
df1 = df.loc[mask].copy()

 

그럼 잘 사용하시기 바랍니다.