3) copy를 이용한 데이터 복사
원본 리스트를 보존하기 위해 리스트를 복사해야 하는 경우가 있다
복사에 대해 제대로 알지 못한 채로 함부로 복사하면, 원본 객체가 변경되어 문제가 생길 수 있다
- 데이터 생성
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
- 얕은 복사(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
-> 원본 리스트와 복사된 리스트가 같은 주소를 가지고 같은 객체를 가지고 있기 때문에
복사된 리스트를 변경하면 원본 리스트 또한 변경됨
- 깊은 복사(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
-> 원본 리스트와 복사된 리스트는 각기 다른 객체. 따라서 복사된 리스트를 변경하더라도 원본 리스트에는 변화가 없다
'study📚 > python' 카테고리의 다른 글
[python/파이썬] 데이터 전처리 - loc와 iloc를 이용한 데이터 추출 (0) | 2022.07.23 |
---|---|
[python/파이썬] 데이터 전처리 - 시리즈(Series) (0) | 2022.07.22 |
[python/파이썬] 데이터 전처리 - 데이터 프레임 생성, 칼럼명 추출/변경 (0) | 2022.07.22 |
[python/파이썬] - 제어문(for, while, if), List Comprehension, 외부라이브러리 사용 (0) | 2022.07.21 |
[python/파이썬] 리스트(list), 튜플(tuple), 딕셔너리(dict), 셋(set) (0) | 2022.07.14 |
댓글