[Pandas] replace로 값 변경하기

반응형
    반응형

    데이터 분석을 할 때 특정한 값만 변경하고 싶을 때가 있습니다. 그런 경우 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로 지정해서 바꾸면 되겠습니다.
    인덱스로 처리하는 내용은 관련 포스팅을 참고하시기 바랍니다.

     

    관련 포스팅
    [Pandas] DataFrame 특정 row 선택하는 두가지 방법(loc,iloc)

    [Pandas] series 인덱스로 값 찾기

    댓글

    Designed by JB FACTORY

    ....