컴퓨터/Python

[Python] 파이썬, A value is trying to be set on a copy of a slice from a DataFrame 경고

sjblog 2023. 3. 26. 08:45
반응형

경고명: A value is trying to be set on a copy of a slice from a DataFrame

 

원인: Pandas 데이터프레임에서 일부 데이터를 선택하여 슬라이스(slice)한 후에 그 슬라이스의 사본(copy)에 값을 할당하려고 할 때 경고됩니다.

 

 

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
subset = df.loc[:, 'A']
subset[0] = 0

 

subset은 df의 일부분인 사본(copy)이기 때문에 실제 데이터인 df에는 영향을 미치지 않습니다.

 

 

해결법:

방법1. 실제 데이터인 df를 직접 수정합니다.

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
subset = df.loc[:, 'A']
df.loc[0, 'A'] = 0

 

방법2. 사본(copy)인 subset을 굳이 수정하여야 한다면, copy()를 사용할 것

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
subset = df.copy().loc[:, 'A']
subset[0] = 0

 

방법3. 귀찮다. 그냥 경고창을 꺼줍니다.

pd.options.mode.chained_assignment = None

 

 

반응형