[Pandas] replace로 값 변경하기
- Python/Pandas
- 2022. 1. 28.
데이터 분석을 할 때 특정한 값만 변경하고 싶을 때가 있습니다. 그런 경우 replace를 이용해 값을 변경할 수 있습니다.
replace는 값에 초점을 맞췄기 때문에 한글이나 word에 있는 찾아바꾸기 기능과 동일합니다.
Seires와 DataFrame 모두 적용 가능합니다.
Series에서의 replace 적용
간단한 Series를 만들어 살펴보겠습니다
import pandas as pd s = pd.Series([0,1,2,3,4,5])
1개값 변경
사실 Series에서 값을 변경하려면 해당 값을 지정해주면 끝입니다.
s[0] = 3
s
간단하게 값이 변경되서 굳이 replace를 쓸 이유가 없긴 합니다만 위의 방식처럼 지정을 해버리면 확정이 되어서 이전 데이터로 돌아갈수가 없습니다. 하지만, replace는 inplace=True를 적용해야만 s에 변경값이 적용되므로 실수를 방지할 수 있습니다.
s.replace(0,3)
s
보시는바와 같이 inplace 적용을 하지 않으면 원본은 변경되지 않습니다.
2개 이상값 변경
여러개를 변경하고 싶다면 리스트나 딕셔너리를 사용합니다.
s.replace([1,2,3],[4,5,6])
딕셔너리는 직접 지정을 합니다.
s.replace({0:27},{1:270})
앞의 값 또는 뒤의 값으로 변경
replace에는 method라는 파라미터가 있습니다.
앞의 값으로 채울것인지 뒤의 값으로 채울것인지 정해주면 됩니다.
요소는 3가지로 되어있습니다.
- 'pad': 앞의 값으로 대체
- 'ffill': 앞의 값으로 대체
- 'bfill' : 뒤의 값으로 대체
pad와 ffill은 같은 결과가 나와서 pad에 대해서만 예제를 보여드립니다.
s[0]=10
s.replace([1,2,3],method='pad')
0번째 값인 10으로 1,2,3이 바뀌었습니다.
s.replace([1,2,3],method='bfill')
4번째 값인 4로 1,2,3 값이 바뀌었습니다.
주의할 것은 인덱스와 상관없이 값에 대해서만 된다는 것 기억하고 있어야 합니다.
0번째,1번째를 모두 10으로 바꾸고 bfill을 해보면 다음과 같이 나옵니다.
s[0] = 10
s[1] = 10
s.replace([10],method='bfill')
코딩을 할 때 인덱스가 아니라 값을 넣어야 하는 것을 꼭 기억하시길 바랍니다.
DataFrame에서의 적용
데이터프레임에서도 replace를 쓸 수 있습니다.
Series와 다르게 컬럼이 여러개므로 replace를 실행하면 값이 같은 것은 다 바뀌게 됩니다.
df
1을 100으로 바꾸면 1에 해당하는 모든 값이 100으로 바뀝니다.
df.replace(1,100)
원하는 컬럼에서만 하고 싶다면 딕셔너리로 지정을 합니다.
df.replace({'col_1':1},100)
여러 칼럼에서 원하는 값으로 변경하는 경우도 딕셔너리로 가능합니다.
df.replace({'col_1':1,'col_2':3},100)
여러 칼럼에서 각기 다르게 변경하고 싶다면 각각에 대해 지정을 해줍니다.
다음과 같이 합니다.
df.replace({'col_1':{1:100},'col_2':{2:200}})
마치며..
replace에 대해 간단히 알아보았습니다.
찾아바꾸기의 기능과 같고 인덱스로 값을 찾아서 바꾸는 방법과는 약간 다릅니다.
인덱스로 찾아서 바꾸고 싶다면 역시 지정을 통해서 할 수 있습니다.
loc나 iloc로 지정해서 바꾸면 되겠습니다.
인덱스로 처리하는 내용은 관련 포스팅을 참고하시기 바랍니다.
'Python > Pandas' 카테고리의 다른 글
[Pandas] 함수 적용하기(map,apply, applymap) (0) | 2022.02.04 |
---|---|
[Pandas] SQL 데이터베이스 저장, 불러오기 (0) | 2022.01.31 |
[Pandas] CSV 저장,불러오기 (2) | 2022.01.19 |
[Pandas] 원하는 위치값 가져오기(at,iat) (0) | 2022.01.14 |
[Pandas] series 인덱스로 값 찾기 (0) | 2022.01.10 |