코딩코딩코딩

Pandas DataFrame 사용 시 SettingWithCopyWarning 발생 원인 본문

파이썬/문법

Pandas DataFrame 사용 시 SettingWithCopyWarning 발생 원인

hanshow113 2020. 8. 19. 14:36

SettingWithCopyWarning 에러는 원천 DataFrame의 일부로 구성된 파생 DataFrame에 변경을 가하는 경우 발생합니다.

기본적으로 Pandas는 원천 DataFrame을 생성할 때에만 메모리를 할당합니다
이로부터 파생되는 DataFrame은 원천 DataFrame을 이미 적재된 메모리에 접근케 하며 이를 통해 메모리를 절약합니다.

다만 Pandas에서는 파생 DataFrame에 수정을 가하는 것을 권장하지 않습니다.
따라서 copy() 메서드를 통해서 파생 DataFrame에 독립적인 메모리를 부여한 뒤 여기에 수정을 가하도록 유도합니다.

즉, SettintWithCopyWarning은 원천 DataFrame의 일부를 수정하려고 할 때 발생하며, 이 문제는 파생 DataFrame을 copy() 메서드를 통해 생성함으로써 별도의 메모리 공간을 부여하는 것으로 해결할 수 있습니다.

 

아래에 간단한 예제를 준비했습니다.

output 이라는 가상의 csv 파일이 있다고 가정합니다.
df = pd.read_csv("output.csv")
이 DataFrame은 10개의 행과 [Number, String, page] 세 개의 열로 이루어짐


### 에러 발생

Col_1 = df["Number"]

for i in range(len(Col_1)):
	processed = Col_1[i] + 1
Col_1 = processed



### 에러 발생하지 않음

Col_1 = df["Number"].copy()

for i in range(len(Col_1)):
	processed = Col_1[i] + 1
Col_1 = processed

 

copy  메서드에 대한 설명은 아래 글을 참고하시면 됩니다.

https://hansuho113.tistory.com/6?category=914287

 

파이썬 list copy

- 단순 복사는 복사된 데이터에 변형을 주면 원본데이터에도 변형이 일어납니다. - 얕은 복사는 2차원 리스트를 예로 들었을 때, 단순 값으로 배정된 원소의 경우 원본데이터에 영향을 미치지 않

hansuho113.tistory.com

 

 

 

참고)

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

 

Pandas의 DataFrame 사용 중 SettingWithCopyWarning 발생할 때

Python, Pandas를 Excel보다 사랑하는 직장인을 위한 블로그

emilkwak.github.io

 

Comments