Pandas - SettingWithCopyWarning
Pandas를 사용해 데이터를 처리하다보면 생성한 데이터프레임에 대해 특정 조건에 따라 값을 재할당하는 경우가 많습니다. 예를 들어 다음과 같은 데이터프레임에 대해서 z 칼럼이 50 미만인 값을 0으로 치환하고 싶다고 합시다. >>> data = {"x": 2**np.arange(5), "y": 3**np.arange(5), "z": np.array([45, 98, 24, 11, 64])} >>> df = pd.DataFrame(data=data, index=["a", "b", "c", "d", "e"]) >>> df x y z a 1 1 45 b 2 3 98 c 4 9 24 d 8 27 11 e 16 81 64 일반적인 방법으로는 df['z'] < 50 구문으로 boolean 마스크를 생성하고 필터링을..
Shallow copy vs Deep copy
파이썬에서의 assignment operation (=)은 객체의 복사본을 만들지 않습니다. 메모리 상에 존재하는 하나의 객체에 대해 다른 변수이름을 binding 하는 것 뿐이죠. 따라서 리스트와 같은 변경 가능한 객체에 대해서 b=a 를 수행하고 a의 원소값을 변경하면 b의 값 또한 마찬가지로 변경됩니다. >>> a = [1,2,3,4] >>> b = a a[3] = 100 >>> a [1, 2, 3, 100] >>> b [1, 2, 3, 100] 하지만 문자열, 정수와 같은 불변 객체에 대해서는 적용되지 않습니다. a의 값을 다른 값으로 변경하면 a는 메모리 상의 다른 객체를 참조하고 b는 그대로 원래 객체를 참조합니다. >>> a = 10 >>> b = a >>> b 10 >>> a = 'abc'..