문제의 에러 메시지

__main__:1: SettingWithCopyWarning: 
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

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
import numpy as np
import pandas as pd

gps = pd.read_csv("D:/gps.csv")

y1 = gps[gps.name.str.contains('Y1')]

y1['Y2'] = y1['Y'].values

요런 코드에서 오류가 났다.

찾아보니 copy warning인데 지정된 DataFrame을 딥카피하면 해결된다고 한다.

위 코드같은 경우에는 gps변수의 index를 이용해 y1 변수가 선언돼있는데, 이렇게 바로 지정하면 y1변수가 gps의 메모리 위치를 참조해버리기 때문인 것 같다.

이런 경우에 y1은 그냥 gps의 저 선언된 위치를 보여주는거라서

gps의 메모리를 공유하는 y1을 수정코자 하니까 gps를 수정해야하나? 하는 생각을 하는 것 같다.

이런 경우 Deep copy를 해야 하는데 간단히 뒤에 .copy()를 해주면 된다.

그러면 컴퓨터가 해당 변수의 ‘정보’들을 복사해서 새로운 메모리를 할당해주니까 꼬이지 않는다.

위 코드는 아래같이 바꾸면 된다.

import numpy as np
import pandas as pd

gps = pd.read_csv("D:/gps.csv")

y1 = gps[gps.name.str.contains('Y1')].copy()

y1['Y2'] = y1['Y'].values