일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Beautifulsoup
- PANDAS
- 숫자형
- 영어한글폰트차이
- 구글폰트
- hackerrank
- 해커랭크
- 카카오채용코테'
- 비밀지도
- 깃허브블로그
- 한국주식
- Requests
- 깊은복사
- Github
- googlefont
- 네이버금융
- Python
- numpy
- 서울정보소통광장
- Repositories
- 120주요질문
- dataframe
- 수치형변수
- 데이터수집
- FinanceDataReader
- seaborn
- SettingWithCopyWarning
- GIT
- 프로그래머스
- github blog
- Today
- Total
데린이 재영
SettingWithCopyWarning 경고 메시지 대처하기 - 깊은복사? 얕은복사? 본문
목표설정
- 깊은 복사와 얕은 복사 정의하기
- 경고 메시지 분석하기
- 경고 메시지 해결하기
깊은 복사, 얕은 복사
- 왜 알아야할까?
변수에 값을 할당할 때, 즉 복사가 이루어지는 과정에서 깊이에 따라 재 사용시 !경고! 메시지가 뜰 수 있기 때문에, 알아두면 좋을 것 같다.
(1) 얕은 복사
- 얕은 복사란, '주소 값'을 복사한다는 의미입니다.
- 슬라이싱을 통해 새로운 값을 할당하면 아래와 같이 두 변수는 서로 영향을 받지 않는다. (슬라이싱 기능은 얕은 복사에 해당)
- copy 모듈의 copy 메소드 또한 얕은 복사에 해당한다.
a = [1, 2, 3, 4, 5]
b = a[:3]
>>> print(f"a: {a}, b: {b}")
a: [1, 2, 3, 4, 5], b: [1, 2, 3]
(2) 깊은 복사
- 깊은 복사란, '실제 값'을 새로운 메모리 공간에 복사하는 것을 의미합니다.
- 새로운 복합 객체를 만들고, 재귀적으로 원본 객체의 사본을 새로 만든 복합 객체에 삽입한다.
- 즉, 새롭게 copy 되는 것이다.
pandas - 경고 메시지 분석
1. Dataframe 을 슬라이싱하여 y_test 와 y_predict 라는 변수에 할당해 주었다.
2. y_test와 y_predict를 메소드 등을 사용해서 추가적으로 변경해 주었다.
3. 아래와 같은 메시지 발생
왜 경고가 발생되었을까?
- SettingWithCopyWarning : Pandas 자체에서 발생시키는 경고 (Warning) 메시지
- 경고 원천 : 파생 데이터프레임에 변경을 가하는 경우
왜 경고가 발생하는걸까?
- Pandas DataFrame은 연쇄적인 연산과 처리를 허용하며 자료구조이기 때문에 메모리를 점유한다.
- 모든 데이터프레임에 메모리를 할당하려 들면 금방 바닥을 보이게 될 것이다.
- 원천 데이터프레임을 생성할 때만 메모리를 할당하고 파생되는 데이터프레임은 원천 데이터프레임을 이미 적재된 메모리에 접근케 하면 메모리를 절약할 수 있다.
- copy() 메서드를 통해 파생 데이터프레임에 독립적인 메모리를 부여할 수 있다!
pandas - 경고 메시지 해결
- 파생 데이터프레임에 copy() 메서드를 실행해, 원천 DataFrame 과 별도인 메모리 공간을 파생 DataFrame에 부여
# 위 경고 메시지를 해결하려면 아래와 같이 입력하면 됨
y_test = df[:100].copy()
y_predict = df[100:].copy()
한줄 정리
pandas 데이터프레임을 사용할 때! 다른 파생 변수를 만들어야 한다면, 메모리 절약을 위해 .copy() 메서드를 이용하자!
참고문헌
1. [위키독스] 파이썬 - 기본을 갈고 닦자! : 12. 얕은 복사(shallow copy)와 깊은 복사(deep copy)
2. [pandas 공식문서] - Returning a view versus a copy
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
3. [python 공식문서] - copy : 얕은 복사와 깊은 복사 연산
https://docs.python.org/ko/3.8/library/copy.html
추천 👉 4. Emil Kwak - Pandas의 DataFrame 사용 중 SettingWithCopyWarning 발생할 때
https://emilkwak.github.io/pandas-dataframe-settingwithcopywarning