파이썬으로 데이터 프레임을 활용해 표를 슬라이싱 하던 중
아래와 같은 Warning이 발생했다.
빨간색이라 몹시 무섭다
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:6: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:7: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy import sys C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:8: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
막상 결과물에 문제가 없길래 확실히 간단한 경고인가보다.. 생각하고 찾아보니
파이썬에서의 복사에는
얕은 복사(shallow copy)와 깊은 복사(deep copy)가 있는데
summary라는 데이터 프레임에 summary의 값을 넣다보니 서로가 서로에게 영향을 주는 얕은 복사가 행해져서
추후에 의도치 않게 이 쪽 데이터를 터치했는데 다른 데이터도 영향을 받는 일(다른 객체가 같은 메모리 주소를 사용해서 바뀌는 일)이 생길까 띄우는 경고 메시지라고 생각하면 되겠다.
해결 방법은 DF.copy() 메소드를 사용해 새로운 데이터 프레임(메모리 주소가 다른)을 생성해 해결하면 되겠다!
근데 사실 내가 쓰는 데이터에서는 정합성에 문제도 없고 저 방법이 메모리를 더 잡아먹어 클리어 해주지 않으면 더 느릴수도...
오류가 신경 쓰인다면 날려주도록하자!
개발에 있어서는 .copy() 를 사용하는 것이 더 이롭다.
import numpy as np
import pandas as pd
summary['year'] = 0
summary['month'] = 0
summary['day'] = 0
for i in range(0,len(summary['date'])):
#summary['date'][i] = int(summary['date'][i])
summary['year'][i] = summary['date'][i][0] + summary['date'][i][1] + summary['date'][i][2] + summary['date'][i][3]
summary['month'][i] = summary['date'][i][4] + summary['date'][i][5]
summary['day'][i] = summary['date'][i][6] + summary['date'][i][7]
*오늘의 공부
얕은 복사(shallow copy)와 깊은 복사(deep copy)를 구분해서 사용하면 좋다.
'코오딩|python' 카테고리의 다른 글
[Python] Pandas 자주 쓰는 구문 정리 (0) | 2021.06.18 |
---|