본문 바로가기
study📚/python

데이터 전처리 - copy를 이용한 데이터 복사

by 스닝 2022. 7. 22.

3) copy를 이용한 데이터 복사

원본 리스트를 보존하기 위해 리스트를 복사해야 하는 경우가 있다

복사에 대해 제대로 알지 못한 채로 함부로 복사하면, 원본 객체가 변경되어 문제가 생길 수 있다

  1. 데이터 생성
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]})

-문제 : 필드명을 a, b, c 에서 d, e, f로 변경하기

df.columns = ['d', 'e', 'f']

df

-문제 : 필드명 a를 '에이'로 변경하기

df

df = pd.DataFrame({'a': [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]})

df.rename(columns = {'a' : '에이'}, inplace = True)

df

  1. 얕은 복사(Shallow Copy)
    : 원본 객체의 주소 값을 복사

1) '=' 연산자

df = pd.DataFrame({'a': [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]})
df2 = df
df

df2

2) copy 모듈을 이용한 copy()함수

df = pd.DataFrame({'a': [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]})
copy_df = copy.copy(df)
copy_df

-문제 : 필드명을 a, b, c에서 d, e, f로 변경

df.columns = ['d', 'e', 'f']
df

df2

copy_df

-> 원본 리스트와 복사된 리스트가 같은 주소를 가지고 같은 객체를 가지고 있기 때문에
복사된 리스트를 변경하면 원본 리스트 또한 변경됨

  1. 깊은 복사(Deep Copy)
    : 참조 주소 값이 아닌 참조된 객체 자체를 복사
  • copy모듈의 deepcopy()함수
import copy
df = pd.DataFrame({'a': [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]})
df2 = copy.deepcopy(df)
df

df2

df.columns = ['d', 'e', 'f']
df

df2

-> 원본 리스트와 복사된 리스트는 각기 다른 객체. 따라서 복사된 리스트를 변경하더라도 원본 리스트에는 변화가 없다

댓글