반응형
🐍 파이썬 pandas copy()
꼭 써야 할까? 안 쓰면 생기는 문제 총정리!
파이썬에서 pandas
를 사용할 때, 종종 df.copy()
를 붙여야 하나 고민되는 순간이 있습니다. 단순히 df2 = df
로도 복사가 되는데, 왜 굳이 copy()
를 써야 하는 걸까요? 이번 글에서는 copy()
를 사용할 때와 사용하지 않을 때의 차이점, 그리고 실제 예제와 함께 꼭 알아야 할 팁을 정리했습니다.
✅ 핵심 요약: copy()
는 진짜 복사, 안 쓰면 가짜 복사(얕은 복사)
df2 = df
→ 얕은 복사(shallow copy): 두 변수가 같은 데이터프레임 객체를 참조함df2 = df.copy()
→ 깊은 복사(deep copy): 완전히 독립적인 새 객체를 생성함
🧠 왜 copy()
를 써야 할까?
1. 원본 데이터프레임(df)이 바뀌면 같이 바뀐다!
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3]})
df2 = df # 얕은 복사
df2['A'] = df2['A'] * 10
print(df) # 원본도 바뀜
결과:
A
0 10
1 20
2 30
원본 df
까지 바뀌어버렸습니다. 왜냐하면 df2
와 df
가 같은 객체를 가리키고 있기 때문이죠.
2. copy()
를 사용하면 안전하게 원본 보호 가능
df = pd.DataFrame({'A': [1, 2, 3]})
df2 = df.copy() # 깊은 복사
df2['A'] = df2['A'] * 10
print(df) # 원본은 그대로
결과:
A
0 1
1 2
2 3
이제야 우리가 원하던 결과입니다! df2
만 바뀌고 df
는 그대로 유지됩니다.
⚠️ copy()
를 안 쓰면 생길 수 있는 문제
- 전처리 중에 원본 데이터가 의도치 않게 손상됨
- EDA나 분석 중, 원인 모를 값 변경 발생
- 모델 학습용 데이터가 훈련 중 변형될 수 있음
- 팀 작업 시, 예상과 다른 결과로 협업 오류 발생
💡 언제 반드시 copy()
를 써야 할까?
상황 | copy() 필요 여부 |
---|---|
단순 변수 재지정 | ❌ 필요 없음 |
새로운 데이터프레임 만들고 수정 | ✅ 필요함 |
특정 행/열 슬라이싱 후 수정 | ✅ 필요함 |
함수 내부에서 원본 손상 막기 | ✅ 필요함 |
그룹별 통계, 파생변수 생성 시 | ✅ 필요함 |
🔍 정리: copy()
는 데이터 안전벨트
파이썬 pandas에서 df.copy()
는 데이터 손실을 방지하기 위한 필수 안전장치입니다. 잠깐 생략해도 괜찮을 것 같지만, 특히 데이터 전처리나 모델링 과정에서는 꼭 사용해야 할 필수 습관입니다.
반응형
댓글