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
'파이썬완전정복-Pandas DataFrame > 09. 가공' 카테고리의 다른 글
Pandas DataFrame 09-14. 리스트 형태의 값 전개 (explode) (0) | 2022.01.24 |
---|---|
Pandas DataFrame 09-12. 새 열 할당 (assign) (0) | 2022.01.24 |
Pandas DataFrame 09-11. 피벗해제 (melt) (0) | 2022.01.23 |
Pandas DataFrame 09-10. 피벗생성_스프레드시트 기반 (pivot_table) (0) | 2022.01.23 |
Pandas DataFrame 09-09. 피벗변환 (pivot) (0) | 2022.01.23 |