MLOps 부트캠프 by 한경+토스뱅크/Python

DataFrame - 문자열 분리, 변경, 제거하기

나니니 2024. 8. 4. 12:01

대소문자 처리하기

airbnb_df['state'].unique()

# 모두 소문자 통일
airbnb_df['state'].str.lower() # str()함수로 시리즈와 문자열 처리 함수를 연결

# 모두 대문자 통일
airbnb_df['state'].str.upper()

# 앞글자만 대문자, 나머진 소문자
airbnb_df['state'].str.capitalize()

airbnb_df['state']

문자열 분리하기

df.split()

# ,(콤마) 값을 기준으로 'location'컬럼의 문자열 분리하여 0번째 값을 가져오기 
airbnb_df['location'].str.split(',').str[0]

df.strip()

# 문자열 내 공백 제거
airbnb_df['city'].str.strip()

df.replace()

# 특정 문자열 변경(* .온점 -> 공백)
airbnb_df['city'].str.replace('.', '', regex=False)

 

정규표현식(Regular Expressions, RegEx)

: replace()함수는 RegEx의 기본값이 True로 되어 있어 정규표현식을 기준으로 문자열을 처리한다. 

# 위의 코드를 한줄로 정리
airbnb_df['city'].str.strip().str.replace('.', '', regex=False) 

# 문자열 처리 함수를 연결하여 사용할 땐, .str을 기재해줘야 함

예제)

효준이가 수집한 핸드폰 데이터를 좀 더 사용하기 좋게 전처리해 봅시다. 아래에 쓰여 있는 대로 brand, name, size 컬럼에 있는 데이터를 가공해 주세요.

brand 컬럼에 저장된 제조사명의 대소문자 표기를 통일해 주세요. 첫 글자는 대문자로, 나머지 글자는 소문자로 바꿔 주시면 됩니다.
name 컬럼에는 스마트폰의 모델명(예: iPhone 14 Pro)과 용량(예: 256GB) 정보가 함께 들어 있습니다. 모델과 용량을 쉽게 구분해서 볼 수 있도록 문자열을 분리해 주세요. 모델명은 model 컬럼, 용량은 capacity 컬럼에 저장하고, 기존의 name 컬럼은 삭제하면 됩니다.
size 컬럼에는 스마트폰의 디스플레이 크기 정보가 담겨 있습니다. 그런데 데이터에 인치(inch)를 나타내는 " 기호가 들어 있어서 pandas가 이 컬럼의 데이터 타입을 문자 데이터로 인식하고 있네요. " 기호를 없앤 뒤 size 컬럼의 데이터 타입을 적절한 숫자 타입으로 바꿔 주세요.

import pandas as pd

cellphone_df = pd.read_csv('data/cellphone.csv')

# 대소문자 표기 통일하기
cellphone_df['brand'] = cellphone_df['brand'].str.capitalize()

# 문자열 분리하기
cellphone_df['model'] = cellphone_df['name'].str.split('(').str[0]
cellphone_df['capacity'] = cellphone_df['name'].str.split('(').str[1]

# 불필요한 문자 제거하기
cellphone_df['model'] = cellphone_df['model'].str.strip()
cellphone_df['capacity'] = cellphone_df['capacity'].str.replace(')', '', regex=True)

# 기존 컬럼 삭제하기
cellphone_df = cellphone_df.drop(columns='name')

# 불필요한 문자 제거하고 데이터 타입 변경하기
cellphone_df['size'] = cellphone_df['size'].str.replace('"', '').astype('float')
cellphone_df

결과값

 

*다른 방식으로 코드 적어보기

# 대소문자 표기 통일하기
cellphone_df['brand'] = cellphone_df['brand'].str.capitalize()

# 분자열 분리
cellphone_df['model'] = cellphone_df['name'].str.split(' ').str[:-1].str.join(' ')
cellphone_df['capacity'] = cellphone_df['name'].str.split(' ').str[-1].str.replace('(', '').str.replace(')', '')

# 불필요한 문자 제거(변경) 및 데이터 타입 변경
cellphone_df['size'] = cellphone_df['size'].str.replace('"', '').astype(float)

# 기존 컬럼 제거
cellphone_df.drop(columns=['name'], inplace=True)

cellphone_df