반응형

 

 

💬 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[]를 명확하게 써주면 경고를 방지할 수 있습니다.
반응형
반응형

 

 

💬 KeyError: 'column_name'
데이터 다루다 보면 꼭 한 번은 마주치는 이 에러.
왜 발생하고, 어떻게 예방할 수 있을까요?

 

 

❗ 에러 메시지 예시

KeyError: 'price'

→ 없는 key(또는 column)를 찾으려 해서 발생한 오류입니다.

 

🔍 원인: 딕셔너리나 DataFrame에서 없는 키를 호출했을 때

my_dict = {'a': 1, 'b': 2}
print(my_dict['c'])    # ❌ KeyError 발생

또는 Pandas에서:

import pandas as pd

df = pd.DataFrame({
    'name': ['a', 'b'],
    'value': [1, 2]
})

df['price']    # ❌ 'price'라는 컬럼이 없음

 

 

🧪 자주 발생하는 사례

✅ 오타

df['Price']    # 대소문자 구분 때문에 오류 발생

 

✅ drop(), groupby(), merge() 등에서 존재하지 않는 컬럼 지정

df.drop(columns=['price'])  # 없는 컬럼이면 KeyError

 

 

🛠️ 해결 방법

✔ 컬럼 존재 여부 확인 후 사용

if 'price' in df.columns:
    df['price']
else:
    print("컬럼이 없습니다.")

 

✔ get() 사용 (딕셔너리에서)

value = my_dict.get('c', 0)  # 없으면 기본값 0

 

✔ try-except로 에러 방지

try:
    df['price']
except KeyError:
    print("해당 컬럼이 존재하지 않습니다.")

 

 

✅ 마무리 정리

  • KeyError는 존재하지 않는 키나 컬럼명을 호출할 때 발생합니다.
  • 오타, 대소문자 구분, 컬럼 삭제 후 호출 등의 실수가 원인일 수 있습니다.
  • 호출 전에 in으로 존재 여부를 체크하거나, get()을 사용해 안전하게 처리하세요.

 

📘 다음에 보면 좋은 글

🔹 [에러 해결] ValueError: could not convert string to float – 왜 이런 에러가 날까?

반응형

+ Recent posts