파이썬 [Pandas] SettingWithCopyWarning

범모 ( bbeom dev) ·2025년 2월 23일

SettingWithCopyWarning

  • Pandas 데이터프레임을 다루면서 자주 보는 에러 중에 하나
import pandas as pd
df = pd.DataFrame([10,11,12])
df2 = df[df[0] >= 11]
df2['flag'] = 'o'

예를 들어 이 코드는 경고가 뜸
이유는 df에서 파생된 df2에서 ['flag'] 컬럼에 'o'를 할당했기 때문
( Hidden Chaning에 해당함 )

df = pd.DataFrame([10,11,12])
df2 = df[df[0] >= 11].copy()
df2['flag'] = 'o'

다음과 같이 df2를 df2를 copy한다고 명시적으로 표현하여 깊은복사를 하면 오류가 사라짐
copy를 하지 않을 경우 df2를 수정할 때 원천인 df의 데이터도 수정될 수 있다는 위험성을 알려주는 거 같음

Assignment

  • 값을 할당하는 것 ( set 연산 )
df = pd.DataFrame([10,11,12]) # 값 할당

Access

  • 특정 값에 접근하는 것 ( get 연산 )
df2 = df[df[0] >= 11] # 값 추출

Chanined Assignment

  • Assignemnt와 Access가 같이 이루어지는 경우
df = pd.DataFrame([10,11,12]) # 값 할당
df[df[0] >= 11]['flag'] = 'o' # 특정 값 추출 후 값 할당

SettingWithCopyWarning 에러 발생.
-> df의 flag 컬럼이 생성되지 않음
왜냐면 pandas에서 특정 값을 추출할 때는 기본적으로 view임
( 복사의 개념 x )

Hidden Chaining

  • 원천에서 데이터를 추출하여 가공하였을 때, 가공된 데이터에 값을 Assignemnt 하는것
    위의 예시가 Hidden Chaining이며 코드를 어떻게 짜냐에 따라서 원천 데이터 view가 나올지 가공된 데이터의 값이 나올지
    알 수 없음

Reference

profile
AI로 사회에 긍정적인 영향을 줄 수 있는 개발자가 되기 위해 성장하고 있습니다.

0개의 댓글