Python/Pandas

[Pandas] 파이썬 판다스 Deep copy와 Shallow copy 비교(데이터 프레임 복사 copy 함수)

jimmy_AI 2021. 11. 19. 16:33
반응형

이번 포스팅에서는 파이썬 판다스에서 깊은 복사(Deep copy)와 얕은 복사(Shallow copy)의 차이에 대해서 알아보고, 판다스에서 데이터프레임 복사 시에 copy 함수를 사용해야 하는 이유에 대해서 말씀드려보려 합니다.

 

판다스 데이터프레임 얕은 복사(Shallow copy)

얕은 복사는 데이터를 지정하고 있는 주소까지 복사하여 복사된 객체를 변경했을 때, 원래 객체까지 같이 변경되는 복사를 의미합니다.

 

일단 간단한 데이터프레임을 하나 선언해볼까요?

이제 df_1 = df 형태로 그냥 단순 shallow copy를 진행해보고

데이터프레임 내 값을 1개 바꾼 뒤, 원래 객체 데이터프레임인 df의 값을 살펴보도록 하겠습니다.

맨 위의 값 한개를 loc함수를 이용하여 변경하였습니다.

df_1의 값은 변경되는 것을 확인하였고요.

원래 데이터프레임인 df의 값도 같이 변경되었네요!

이러한 이유때문에 작업 도중 df_1 = df 처럼 얕은 복사를 하게 되면 기존 데이터도 바뀌어버려서 혼동되는 상황을 겪게 되는 것입니다.ㅠㅠ

 

이점을 방지하기 위해서는 추가 작업을 하는 경우 객체의 주소까지 복사하는 얕은 복사(shallow copy)가 아닌 객체만 복사하여 새로운 주소에 할당하는 깊은 복사(deep copy)를 진행해야한답니다!

판다스 데이터프레임 깊은 복사(Deep copy) : copy 함수

이번에는 깊은 복사를 판다스 데이터프레임에서 진행해보도록 하겠습니다.

방법은 간단합니다. df_1 = df 처럼 직접 할당이 아닌, df_2 = df.copy() 처럼 copy 함수를 적용해주면 됩니다.

 

첫 코드에서 실행했던 데이터프레임 df를 재선언한 뒤, copy 함수로 복사를 진행 후, loc 함수로 값 1개를 변경해보도록 하겠습니다.

df_2는 정상적으로 값이 변경된 상황입니다.

 

이제 원래 데이터프레임인 df의 값도 살펴볼까요?

넵! 안전하게 원래 데이터프레임은 보존된 것을 확인해보았습니다!

copy 함수 하나만 써서 복사했을 뿐인데 원하는대로 원래 데이터프레임이 보존되었네요!

 

이상으로 파이썬 판다스에서의 얕은 복사와 깊은 복사 차이점을 알아보았고, copy 함수를 사용하여 복사를 진행해야 하는 이유를 생각해볼 수 있었습니다. 도움이 되셨다면 좋겠습니다!