09-03. 복사 (copy)
DataFrame.copy(deep=True)
개요
Pandas객체를 복사합니다. deep copy와 shallow copy기능을 지원합니다.
사용법
기본 사용법
df.copy(deep=True)
deep : {True or False} 기본값 True
deep = True인 경우를 deep copy라고 하며 원본과는 완전하게 별개인 복사본이 생성됩니다. 사본과 원본의 수정은 서로에게 영향을 끼치지 않습니다.
deep = False인 경우를 shallow copy라고 하며 원본의 데이터 및 인덱스를 복사하지않고 새 객체를 호출합니다.
즉, 원본의 데이터가 수정되면 사본의 데이터도 수정되며, 그 반대도 마찬가지 입니다.
예시
먼저, 아래와 같이 series객체를 하나 만들고, deep copy본과 shallow copy본인 객체를 생성해봅니다.
sr = pd.Series([1, 2], index=["col1", "col2"])
deep = sr.copy(deep=True)
shallow = sr.copy(deep=False
print(sr)
>>
col1 1
col2 2
dtype: int64
이제 원본인 sr과 deep copy본인 deep, shallow copy본인 shallow의 요소를 변경하고 다시 출력해보겠습니다.
sr[0] = 9
shallow[1] = 8
deep[1]=7
원본 출력시
shallow에서 변경한 내용이 원본인 sr에도 적용된 것을 확인할 수 있습니다.
print(sr)
>>
col1 9
col2 8
dtype: int64
shallow copy본 출력시
sr에서 변경한 내용이 사본인 shallow에도 적용된 것을 확인할 수 있습니다.
print(shallow)
>>
col1 9
col2 8
dtype: int64
deep copy본 출력시
원본이나 다른 사본의 변경내용과 무관하게 자기 자신의 변경내용만이 적용된 것을 확인할 수 있습니다.
print(deep)
col1 1
col2 7
dtype: int64
DataFrame의 경우
마찬가지로 기본적인 3x3 DataFrame객체를 생성해보겠습니다.
col = ['col1','col2','col3']
row = ['row1','row2','row3']
df = pd.DataFrame(data=[[1,2,3],[4,5,6],[7,8,9]],index=row,columns=col)
deep = df.copy(deep=True)
shallow = df.copy(deep=False)
print(df)
>>
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
이제 원본과 copy본의 값을 아래와 같이 변경하고 출력해보겠습니다.
df['col1']['row1']=99
shallow['col2']['row2']=88
deep['col2']['row2']=77
원본 출력시
shallow에서 변경한 내용이 원본인 df에도 적용된 것을 확인할 수 있습니다.
print(df)
>>
col1 col2 col3
row1 99 2 3
row2 4 88 6
row3 7 8 9
shallow copy본 출력시
df에서 변경한 내용이 사본인 shallow에도 적용된 것을 확인할 수 있습니다.
print(shallow)
>>
col1 col2 col3
row1 99 2 3
row2 4 88 6
row3 7 8 9
deep copy본 출력시
원본이나 다른 사본의 변경내용과 무관하게 자기 자신의 변경내용만이 적용된 것을 확인할 수 있습니다.
print(deep)
>>
col1 col2 col3
row1 1 2 3
row2 4 77 6
row3 7 8 9
'파이썬완전정복-Pandas DataFrame > 09. 가공' 카테고리의 다른 글
Pandas DataFrame 09-06. 자르기 (truncate) (0) | 2022.01.23 |
---|---|
Pandas DataFrame 09-05. 행 추가 (append) (0) | 2022.01.23 |
Pandas DataFrame 09-04. 행/열 삭제 (drop) (0) | 2022.01.23 |
Pandas DataFrame 09-02. 열 꺼내기(pop) (0) | 2022.01.23 |
Pandas DataFrame 09-01. 열 삽입 (insert) (0) | 2022.01.23 |