문자열 처리하기

wandajeong·2021년 12월 26일
0

Data Handling

목록 보기
9/15

Python에서 제공하는 문자열 처리 기능은 매우 강력하며, 다양한 방법으로 데이터를 조작할 수 있다. 여기서는 Python의 기본 문자열 처리 방법부터 더 복잡한 데이터프레임 내의 문자열 처리까지 다루어 보고자 한다.

아래 예시의 email은 series 형식이라고 가정한다. Series 객체에 문자열 메서드를 적용할 수 있도록 .str을 붙여서 문자열을 처리한다.

기본 문자열 처리

  • 공백 및 특수문자 제거
import pandas as pd
import re

# 앞뒤 공백 제거
email = email.str.strip()

# 앞뒤 문자 제거, a='*abcd*'일때 
a.strip('*') # abcd

# 영어, 한글, 숫자만 남기고 특수 문자 제거
def clean_text(inputString):
    return re.sub('[^a-zA-Z0-9가-힣]', '', inputString)

df['refined'] = df['refined'].apply(clean_text)
  • 문자열 채우기
# 왼쪽에 '_' 추가
email.str.pad(width=20, fillchar='_')

# 오른쪽에 '*' 추가
email.str.pad(width=20, fillchar='*', side='right')
  • 대체하기
# 간단한 문자열 대체
email = email.str.replace(' at ', '@')

# 복수의 문자열 패턴을 빈 문자열로 대체
email = email.str.replace('hankook|hanguk|hankuk|hangug', '', regex=True)

# 문자열을 다른 문자로 매핑하여 대체
email = email.str.translate(str.maketrans('123', '456')) 
# 1은 4로, 2는 5로, 3은 6으로 대체됨
  • 대소문자 변환
# 소문자 변환
email = email.str.lower()

# 대문자 변환
email = email.str.upper()

문자열 쪼개기 및 확장

# '@' 기준으로 문자열 분리하여 리스트 반환
email.str.split('@')

# 데이터프레임으로 변환
email.str.split('@', expand=True)

# 점(.)을 기준으로 한 번만 분리
email.str.split('.', n=1, expand=True)
#뒤에서부터 한번만 쪼개기 
email.str.rsplit('.', n=1, expand=True)

확인메서드

# 문자열 길이 확인
lengths = email.str.len()

# 특정 문자의 개수 세기
count_a = email.str.count('a')

# 문자열에서 특정 문자나 문자열 찾기
email.str.find('@')  #한번 찾으면 끝 
email.str.rfind('.')  #뒤에서부터 찾기

# 특정 문자로 시작하거나 끝나는지 확인
starts_with_h = email.str.startswith('h')
ends_with_r = email.str.endswith('r')
email.str.contains('co.')
email.str.contains('co\.')  #진짜 점으로 인식하기위해서
email.str.str.replace(r'\(주\)','')  #진짜 괄호로 인식하기 위해 

# 문자열이 '숫자'로만 이루어져 있는지 확인 
str.isdigit()
str.isdigit("판단하고자 하는 문자열")

여기서 역슬래시(\)를 사용하는 이유는 정규 표현식에서 특정 문자가 가진 특별한 의미를 제거(이스케이프)하기 위해서이다. 정규 표현식에서 몇몇 문자들은 특별한 기능을 수행하며, 이러한 문자들을 "메타 문자"라고 한다. 예를 들어, .은 어떤 한 문자와도 일치할 수 있는 와일드카드로 사용되고, ()는 그룹을 지정하는 데 사용된다.

데이터프레임 문자열 처리

  • 문자열 합치기
# ID별로 태그 값을 콤마로 구분하여 하나의 문자열로 합치기
tag_group = (
	tags
    .groupby('id')[['value']]
    .agg(lambda x: ', '.join(x))
    .reset_index()
    )
  • 문자열 분리하기
# 컬럼 값 분리하여 새로운 데이터프레임 생성
df = df_['other_id'].str.split(',', expand=True)
data.merge(df, left_index=True, right_index=True, how='left')
profile
ML/DL swimmer

0개의 댓글