Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas로 시리즈에서 특수 문자가 2개 이상 포함된 단어의 총 개수 구하기

문제 개요

Pandas 시리즈(Series)에 저장된 각 단어를 검사하여, 특수 문자가 2개 이상 포함된 단어의 총 개수를 구하는 방법을 알아보겠습니다.

입력 예시

다음과 같은 시리즈가 있다고 가정합니다.

0    fruits!!
1 *cakes*
2 $nuts
3 #drinks
dtype: object

이 시리즈에서 특수 문자가 2개 이상 들어 있는 단어는 'fruits!!'와 '*cakes*' 두 개이므로, 기대되는 결과값은 2입니다.

이 문제를 해결할 수 있는 여러 가지 방법을 하나씩 살펴보겠습니다.

해결 방법 1: 반복문과 조건문 활용

가장 기본적인 접근 방식으로, 다음 순서로 진행합니다.

  • Pandas 시리즈를 정의합니다.
  • 특수 문자 목록을 생성합니다. 파이썬의 string.punctuation을 활용하면 편리합니다.
  • 각 단어별 특수 문자 개수와 총 개수를 저장할 변수를 0으로 초기화합니다.
  • for 반복문으로 시리즈의 값을 하나씩 확인하면서, 각 문자가 특수 문자 목록에 포함되어 있는지 검사합니다.
for i in data:
    chars_count = 0
    for j in list(i):
       if j in special_char:
           chars_count = chars_count + 1

이후 특수 문자 개수가 1보다 크면(즉, 2개 이상이면) 총 개수를 1 증가시킵니다.

if(chars_count > 1):
    total_count = total_count + 1
    print(total_count)

전체 구현 예제

import pandas as pd
import string

l = ["Fruits!!", "*Cakes*", "$Nuts", "#Drinks"]
data = pd.Series(l)

chars = string.punctuation
special_char = list(chars)
total_count = 0

for i in data:
    chars_count = 0
    for j in list(i):
       if j in special_char:
           chars_count = chars_count + 1
    if(chars_count > 1):
       total_count = total_count + 1

print(total_count)

해결 방법 2: 정규표현식과 람다 함수 활용

더 간결한 방법으로는 정규표현식(regular expression)과 filter(), lambda 함수를 조합할 수 있습니다.

  • 단어 리스트를 정의합니다.
  • re.findall(r"\W", x)로 각 단어에서 특수 문자를 모두 찾습니다. 정규식 패턴 \W는 알파벳, 숫자, 언더스코어(_)를 제외한 모든 문자, 즉 특수 문자와 매칭됩니다.
  • 찾은 특수 문자의 길이가 1보다 큰 경우만 필터링합니다.
import pandas as pd
import re

l = ["fruits!!", "*cakes*", "$nuts", "#drinks"]
data = pd.Series(filter(lambda x: 1 < len(re.findall(r"\W", x)), l))

전체 구현 예제

import pandas as pd
import re

l = ["fruits!!", "*cakes*", "$nuts", "#drinks"]
data = pd.Series(filter(lambda x: 1 < len(re.findall(r"\W", x)), l))
print("count:", len(data))

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

2

정리

반복문 기반 방법은 로직을 단계별로 이해하기 좋고, 정규표현식 방법은 코드가 훨씬 간결하고 파이썬답다는 장점이 있습니다. 실무에서는 데이터 규모가 클수록 정규표현식과 벡터화 연산을 활용하는 것이 성능 면에서 유리합니다.