Python DataFrame 문자열 치환 replace

판다스 DataFrame, Series에 저장한 값을 치환하고 싶은 경우 replace를 사용합니다.

기본적인 사용방법은 문자열을 변경할 때 사용하는 replace와 같습니다.

하지만 문자열에서 사용하는 경우와 DataFrame처럼 값이 여러개 저장되어 있는 리스트 형태에서 사용하는 것은 조금 차이가 있습니다.

DataFrame에서 문자열을 치환하는 replace를 어떻게 사용하고 어떤 결과가 나오는지 예제를 보면서 확인해보겠습니다.

 

문자열 치환

먼저 샘플 데이터를 준비하겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

print(df)

 

결과

      name  age state  point
0    Alice   24    NY     64
1      Bob   42    CA     24
2  Charlie   18    CA     70
3     Dave   68    TX     70
4    Ellen   24    CA     88
5    Frank   30    NY     57

 

DataFrame에 저장된 값을 replace를 사용해 치환하겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

print(df.replace('CA', 'California'))

 

결과

      name  age       state  point
0    Alice   24          NY     64
1      Bob   42  California     24
2  Charlie   18  California     70
3     Dave   68          TX     70
4    Ellen   24  California     88
5    Frank   30          NY     57

 

DataFrame에 CA 문자열이  California로 전부 치환되었습니다.

숫자 타입의 값도 변환을 해보겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

print(df.replace(24, 100))

 

결과

      name  age state  point
0    Alice  100    NY     64
1      Bob   42    CA    100
2  Charlie   18    CA     70
3     Dave   68    TX     70
4    Ellen  100    CA     88
5    Frank   30    NY     57

 

숫자 24를 100으로 치환했습니다.

결과에서도 알 수 있듯이 DataFrame의 모든 열과 행에 있는 값을 대상으로 치환을 합니다.

DataFrame을 replace로 치환하면 새로운 DataFrame을 반환합니다.

원본 DataFrame을 치환하고 싶은 경우에는 inplace=True를 설정하면 됩니다.

inplace=True를 설정하기 전 원본 데이터를 확인해보겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

dfRe = df.replace('CA', 'California')

# 원본 데이터
print(df)

# 문자열 치환 데이터
print(dfRe)

 

결과

# 원본 데이터
      name  age state  point
0    Alice   24    NY     64
1      Bob   42    CA     24
2  Charlie   18    CA     70
3     Dave   68    TX     70
4    Ellen   24    CA     88
5    Frank   30    NY     57

# 문자열 치환 데이터
      name  age       state  point
0    Alice   24          NY     64
1      Bob   42  California     24
2  Charlie   18  California     70
3     Dave   68          TX     70
4    Ellen   24  California     88
5    Frank   30          NY     57

 

inplace=True를 설정하고 치환을 실행하겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

df.replace('CA', 'California', inplace=True)

# 원본 데이터
print(df)

 

결과

      name  age       state  point
0    Alice   24          NY     64
1      Bob   42  California     24
2  Charlie   18  California     70
3     Dave   68          TX     70
4    Ellen   24  California     88
5    Frank   30          NY     57

 

원본 데이터 문자열이 치환되었습니다.

 

여러개 문자열 치환

DataFrame에 저장된 값을 여러개 치환할 수 있습니다.

치환할 문자를 여러개 지정하기 위해서는 딕셔너리 타입을 사용합니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

print(df.replace({'CA': 'California', 24: 100}))

 

결과

      name  age       state  point
0    Alice  100          NY     64
1      Bob   42  California    100
2  Charlie   18  California     70
3     Dave   68          TX     70
4    Ellen  100  California     88
5    Frank   30          NY     57

 

리스트 타입을 사용해서도 여러개 문자를 지정할 수 있습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

print(df.replace(['CA', 24], ['California', 100]))

 

결과

      name  age       state  point
0    Alice  100          NY     64
1      Bob   42  California    100
2  Charlie   18  California     70
3     Dave   68          TX     70
4    Ellen  100  California     88
5    Frank   30          NY     57

 

리스트 형태로 치환할 대상 문자와 변환 문자를 지정하는 경우 요소수가 일치하지 않으면 에러가 발생합니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

print(df.replace(['CA', 24, 'NY'], ['California', 100]))

 

결과

ValueError: Replacement lists must match in length. Expecting 3 got 2 

 

치환 대상 문자열과 변환 문자 사이즈가 다르지 않도록 주의해야 합니다.

치환 대상 문자열은 리스트로 설정하고 변환 문자를 단일 형태로 지정해서 변환을 할 수 있습니다.

이렇게 지정한 경우에는 치환 대상 문자열이 모두 단일 형태로 지정한 문자열로 치환됩니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

print(df.replace(['CA', 24], 'XXX'))

 

결과

      name  age state point
0    Alice  XXX    NY    64
1      Bob   42   XXX   XXX
2  Charlie   18   XXX    70
3     Dave   68    TX    70
4    Ellen  XXX   XXX    88
5    Frank   30    NY    57

 

문자열 CA와 숫자 24가 XXX로 치환됐습니다.

 

컬럼명 지정 문자열 치환

DataFrame에 저장된 값 중 치환하고 싶은 컬럼명을 지정해 값을 변경할 수 있습니다.

치환하고 싶은 대상 컬럼과 값을 딕셔너리 타입으로 지정을 합니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

print(df.replace({'age': {24: 100}}))

print(df.replace({'age': {24: 100, 18: 0}, 'point': {24: 50}}))

 

결과

# print(df.replace({'age': {24: 100}}))
      name  age state  point
0    Alice  100    NY     64
1      Bob   42    CA     24
2  Charlie   18    CA     70
3     Dave   68    TX     70
4    Ellen  100    CA     88
5    Frank   30    NY     57

# print(df.replace({'age': {24: 100, 18: 0}, 'point': {24: 50}}))
      name  age state  point
0    Alice  100    NY     64
1      Bob   42    CA     50
2  Charlie    0    CA     70
3     Dave   68    TX     70
4    Ellen  100    CA     88
5    Frank   30    NY     57

 

여러 컬럼의 치환 대상 문자열을 같은 값으로 변경도 가능합니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice','Bob','Charlie','Dave','Ellen','Frank'],
                   'age': [24,42,18,68,24,30],
                   'state': ['NY','CA','CA','TX','CA','NY'],
                   'point': [64,24,70,70,88,57]}
                  )

print(df.replace({'age': 24, 'point': 70}, 100))

print(df.replace({'age': [24, 18], 'point': 70}, 100))

 

결과

# print(df.replace({'age': 24, 'point': 70}, 100))
      name  age state  point
0    Alice  100    NY     64
1      Bob   42    CA     24
2  Charlie   18    CA    100
3     Dave   68    TX    100
4    Ellen  100    CA     88
5    Frank   30    NY     57

# print(df.replace({'age': [24, 18], 'point': 70}, 100))
      name  age state  point
0    Alice  100    NY     64
1      Bob   42    CA     24
2  Charlie  100    CA    100
3     Dave   68    TX    100
4    Ellen  100    CA     88
5    Frank   30    NY     57

 

문자열을 치환해 주는 함수인 replace를 DataFrame에서 사용하는 방법을 알아봤습니다.

pandas.Series에서도 DataFrame과 동일하게 replace를 사용할 수 있습니다.

 

댓글