๋ฐ์ํ
๐ฌ SettingWithCopyWarning:
Pandas์์ ํน์ ์กฐ๊ฑด์ผ๋ก ๊ฐ์ ์์ ํ ๋ ์์ฃผ ๋ฑ์ฅํ๋ ์ ๋งคํ ๊ฒฝ๊ณ !
"์ ๋ฐ๊ฟจ๋๋ฐ ๊ฒฝ๊ณ ๊ฐ ๋จ์ง?" ์ถ์ ๋ถ๋ค์ ์ํ ์ค๋ช
์
๋๋ค.
โ ๊ฒฝ๊ณ ๋ฉ์์ง ์์
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
๐ ์์ธ: DataFrame์์ ๋ณต์ฌ๋ณธ์ ๊ฐ์ ํ ๋นํ ๋
df2 = df[df['score'] > 90]
df2['grade'] = 'A' # โ ๊ฒฝ๊ณ ๋ฐ์ ๊ฐ๋ฅ
→ ์ด ์ฝ๋๋ ์๋ณธ df๊ฐ ์๋๋ผ df์ ์ผ๋ถ ๋ณต์ฌ๋ณธ์ ๊ฐ์ ์ค์ ํ๋ ค๊ณ ํ๋ฏ๋ก ๊ฒฝ๊ณ ๊ฐ ๋น๋๋ค.
๐ ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ
โ .loc[]์ ๋ช ์์ ์ผ๋ก ์ฌ์ฉ
df.loc[df['score'] > 90, 'grade'] = 'A' # โ
์์ ํ ๋ฐฉ์
โ .copy()๋ฅผ ์ฌ์ฉํด ์์ ๋ณต์ฌ๋ณธ์์ ๋ช ์
df2 = df[df['score'] > 90].copy()
df2['grade'] = 'A' # โ
๋ช
์๋ ๋ณต์ฌ๋ณธ์ ๊ฒฝ๊ณ ์์
โ ๋ง๋ฌด๋ฆฌ ์ ๋ฆฌ
- Pandas๋ ์ฌ๋ผ์ด์ฑ ๊ฒฐ๊ณผ๊ฐ ๋ณต์ฌ๋ณธ์ธ์ง, ๋ทฐ์ธ์ง ์ ๋งคํ ์ ์์ด ๊ฒฝ๊ณ ๋ฅผ ๋์๋๋ค.
- .copy()๋ .loc[]๋ฅผ ๋ช ํํ๊ฒ ์จ์ฃผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋ฐ์ํ