Python DataFrame 문자열 치환 정규 표현식 사용 방법

DataFrame에 저장된 값을 치환하기 위해서 replace를 사용합니다.

replace를 사용해 문자열을 치환하는 경우 검색 문자열과 완전히 일치하는 문자만 치환이 됩니다.

일부분 일치하는 문자열은 변환되지 않습니다.

문자열 일부만 치환하고 싶은 경우는 regex=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]}
                  )

print(df)

print(df.replace('li', 'LI'))

 

결과

# 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

# print(df.replace('li', 'LI'))
      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에 저장된 li라는 문자를 LI로 치환하려고 했습니다.

하지만 문자열은 치환되지 않았습니다.

정규 표현식을 사용해 치환하겠습니다.

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('(.*)li(.*)', r'\1LI\2', regex=True))

 

결과

      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

 

문자 li가 LI로 치환되었습니다.

replace를 정규 표현식으로 사용하는 경우 작성 방법은 re.sub() 정규 표현식 모듈과 동일합니다.

특정 컬럼만 일부 문자열을 치환하고 싶은 경우에는 정규 표현식을 사용하지 않아도 변경할 수 있습니다.

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['name'] = df['name'].str.replace('li', 'LI')
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

 

문자열 메서드인 str.replace()를 사용해 DataFrame에 있는 값중 부분 일치하는 값만 치환을 할 수 있습니다.

댓글