[Pandas]시리즈(Series)2- 값 변경, copy

ssun·2022년 6월 19일
0

Python Pandas

목록 보기
3/4

✍🏻 복사

deep copy(깊은 복사)

  • 원본의 카피본을 반환하여 값 변경시 원본이 변경되지 않는다.
  • 파이썬 리스트는 slicing 시 deep copy
  • indexing은 deep copy
  • 원본이 변경되어선 안되는 경우 copy()를 이용해 깊은복사를 해야한다.

shallow copy(얕은 복사)

  • 원본을 반환하여 값 변경시 원본에 영향을 준다.
  • Series, DataFrame, 넘파이 배열(ndarray)은 slicing 조회시 shallow copy

copy() 메소드

  • Series, DataFrame, ndarray를 복사하여 반환한다.

✍🏻 값 변경

✔ indexing을 이용해서 값을 변경

s1 = pd.Series(range(10,101,10))
s1
# 0     10
# 1     20
# 2     30
# 3     40
# 4     50
# 5     60
# 6     70
# 7     80
# 8     90
# 9    100

s1[0] = 1000 #특정 index 값을 변경
s1
# 0    1000  
# 1      20
# 2      30
# 3      40
# 4      50
# 5      60
# 6      70
# 7      80
# 8      90
# 9     100

✔ 여러 index 값들을 한번에 변경(fancy indexing)

s1[[0, 3, 6]] = 3200  #같은 값으로 변경
s1
# 0    3200
# 1      20
# 2      30
# 3    3200
# 4      50
# 5      60
# 6    3200
# 7      80
# 8      90
# 9     100

s1[[1, 4, 7, 8]] = 1000,4000,7000,8000 #각각 다른 값으로 변경. 튜플대입(리스트대입도 가능)
s1
# 0    3200
# 1    1000
# 2      30
# 3    3200
# 4    4000
# 5      60
# 6    3200
# 7    7000
# 8    8000
# 9     100

✔ slicing을 이용해 값 변경

  • slicing 한 결과의 원소를 변경하면 원본도 같이 바뀐다.(shallow copy)
s1[:4] = 1234  # 0 ~ 3
s1
# 0    1234
# 1    1234
# 2    1234
# 3    1234
# 4    4000
# 5      60
# 6    3200
# 7    7000
# 8    8000
# 9     100

s1[::3] = 98765
s1
# 0    98765
# 1     1234
# 2     1234
# 3    98765
# 4     4000
# 5       60
# 6    98765
# 7     7000
# 8     8000
# 9    98765

s100 = s1[2:8]
s100
# 2     1234
# 3    98765
# 4     4000
# 5       60
# 6    98765
# 7     7000

s100[3] = 10000
s100
# 2     1234
# 3    10000
# 4     4000
# 5       60
# 6    98765
# 7     7000

s1  
# 0    98765
# 1     1234
# 2     1234
# 3    10000  #s1[3]도 10000으로 변경됨
# 4     4000
# 5       60
# 6    98765
# 7     7000
# 8     8000
# 9    98765

s200 = s1[2:8].copy()  #series/dataframe 객체.copy() : deep copy 
s200
# 2     1234
# 3    10000
# 4     4000
# 5       60
# 6    98765
# 7     7000

s200[3] = 3  #Deep copy이므로 원본은 변경되지 않는다.
s200
# 2     1234
# 3        3
# 4     4000
# 5       60
# 6    98765
# 7     7000

s1
# 0    98765
# 1     1234
# 2     1234
# 3    10000
# 4     4000
# 5       60
# 6    98765
# 7     7000
# 8     8000
# 9    98765
profile
조구마한 개발 기록 블로그

0개의 댓글