반응형

DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')

 

개요


replace메서드는 객체 내 값을 다른 값으로 변경하는 메서드입니다.

 

사용법


기본 사용법
df.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')
to_replace : 변경전 기존 값입니다.
value : 변경될 값입니다.
inplace : 원본을 변경할지 여부입니다.
limit : method 사용시 변경 될 갯수 입니다.
regex : regex 문법을 이용하여 변경값을 정합니다.

반응형

 

예시


먼저, 아래와 같이 간단한 4x4 객체를 만들어 보겠습니다.

col = ['col1','col2','col3','col4']
row = ['row1','row2','row3','row4']
data = [['A','w',1,'alpha'],['B','x',2,'beta'],['C','y',3,'gamma'],['D','z',4,'delta']]
df = pd.DataFrame(data=data, index=row, columns=col)
print(df)
>>
     col1 col2  col3   col4
row1    A    w     1  alpha
row2    B    x     2   beta
row3    C    y     3  gamma
row4    D    z     4  delta

기본적인 사용법
객체 전체에서 1을 99로 변경해보겠습니다.

print(df.replace(to_replace=1,value=99))
>>
     col1 col2  col3   col4
row1    A    w    99  alpha
row2    B    x     2   beta
row3    C    y     3  gamma
row4    D    z     4  delta


to_replace값이 list형태이고 value값이 단일값이면 전체가 동일하게 변경됩니다.
A, B, y, z를 -로 변경해보겠습니다.

print(df.replace(to_replace=['A','B','y','z'],value='-'))
>>
     col1 col2  col3   col4
row1    -    w     1  alpha
row2    -    x     2   beta
row3    C    -     3  gamma
row4    D    -     4  delta


to_replace값과 value값이 모두 같은 길이의 list형태일 경우 각각 같은 순서의 값으로 변경됩니다.
A, B, y, z를 각각 a, b, Y, Z로 변경해보겠습니다.

print(df.replace(to_replace=['A','B','y','z'],value=['a','b','Y','Z']))
>>
     col1 col2  col3   col4
row1    a    w     1  alpha
row2    b    x     2   beta
row3    C    Y     3  gamma
row4    D    Z     4  delta


method와 limit인수의 사용
method가 ffill일 경우 to_replace값을 바로 위 값으로 변경하며, bfill일 경우 to_replace값을 바로 아래 값으로 변경합니다.
method ffill인 경우

print(df.replace(to_replace=['x','y'],method='ffill'))
>>
     col1 col2  col3   col4   # x와 y를 바로 위의 값인 w로 변경
row1    A    w     1  alpha
row2    B    w     2   beta
row3    C    w     3  gamma
row4    D    z     4  delta

method가 bfill인 경우

print(df.replace(to_replace=['x','y'],method='bfill'))
>>
     col1 col2  col3   col4  # x와 y를 바로 아래의 값인 z로 변경
row1    A    w     1  alpha
row2    B    z     2   beta
row3    C    z     3  gamma
row4    D    z     4  delta

method인수를 사용할때 limit인수를 통해 변경될 갯수를 지정할 수 있습니다. limit=1을 통해 1개만 변경해보겠습니다.

print(df.replace(to_replace=['x','y'],method='bfill',limit=1))
>>
     col1 col2  col3   col4   # x와 y에 대하여 bfill을 통해 아랫값인 z로 변경했으나 limit=1로 1개만 변경
row1    A    w     1  alpha
row2    B    x     2   beta
row3    C    z     3  gamma
row4    D    z     4  delta


dict형식의 사용
to_replace에 dict형태를 입력하여 value값 설정 없이 변경이 가능합니다.
A를 a로, z를 Z로 변경해보겠습니다.

print(df.replace(to_replace={'A':'a','z':'Z'}))
>>
     col1 col2  col3   col4
row1    a    w     1  alpha
row2    B    x     2   beta
row3    C    y     3  gamma
row4    D    Z     4  delta

dict안에 dict를 넣음으로써 특정 열의 특정값을 원하는 값으로 변경 할 수 있습니다.
col3을 대상으로 1을 -로, 4를 +로 변경해보겠습니다.

print(df.replace(to_replace={'col3':{1:'-',4:'+'}}))
>>
     col1 col2 col3   col4
row1    A    w    -  alpha
row2    B    x    2   beta
row3    C    y    3  gamma
row4    D    z    +  delta

dict를 통해 각 열의 변경 원하는 값을 지정 후 value를 통해 변경이 가능합니다.
col1열에서 B를, col2열에서 w를 100으로 변경해보겠습니다.

print(df.replace(to_replace={'col1':'B','col2':'w'},value=100))
>>
     col1 col2  col3   col4
row1    A  100     1  alpha
row2  100    x     2   beta
row3    C    y     3  gamma
row4    D    z     4  delta


regex의 사용
regex를 사용할 경우 정규표현식으로 원하는 값을 지정해서 변경 할 수 있습니다.
to_replace를 r'[e]'로 지정하고value를-로 하여 문자열에e가 포함될 경우-로 바꿔보겠습니다.

※이때regex=True로 해서 활성화를 진행해주어야 합니다.

print(df.replace(to_replace=r'[e]',value='-',regex=True))
>>
     col1 col2  col3   col4
row1    A    w     1  alpha
row2    B    x     2   b-ta
row3    C    y     3  gamma
row4    D    z     4  d-lta

to_replace를 사용하지 않고 단순히 regex에 정규표현식을 입력하여도 동일한 결과를 얻을 수 있습니다.

print(df.replace(regex=r'[e]', value='-'))
>>
     col1 col2  col3   col4
row1    A    w     1  alpha
row2    B    x     2   b-ta
row3    C    y     3  gamma
row4    D    z     4  d-lta


inplace를 통한 원본의 변경
Pandas 공통사항으로 inplcace=True일 경우 원본을 변경하게 됩니다.

df.replace(regex=r'[e]', value='-',inplace=True)
print(df)
>>
     col1 col2  col3   col4   # df를 출력함으로서 원본이 변경된것을 확인.
row1    A    w     1  alpha
row2    B    x     2   b-ta
row3    C    y     3  gamma
row4    D    z     4  d-lta
반응형

+ 최근 글