문제 개요
판다스(Pandas) 시리즈에서 'a'로 시작하고 동시에 'a'로 끝나는 문자열만 골라내는 프로그램을 파이썬으로 작성해 보겠습니다.
입력 — 다음과 같은 시리즈가 있다고 가정합니다.
0 apple 1 oranges 2 alpha 3 aroma 4 beta
출력 — 'a'로 시작하고 'a'로 끝나는 요소만 필터링한 결과입니다.
2 alpha 3 aroma
방법 1: 정규식(Regular Expression) 활용
정규식을 이용해 조건에 맞는 문자열을 찾아내는 방법입니다. 단계별로 살펴보겠습니다.
먼저 시리즈를 정의합니다.
'a'로 시작하고 'a'로 끝나는지 검사할 정규식 패턴을 만듭니다.
r'^[a]$|^([a]).*\1$'
빈 리스트를 생성한 뒤, for 반복문 안에서 if 조건문으로 각 요소가 패턴에 일치하는지 확인하고 일치하면 리스트에 추가합니다.
for i in data:
if(re.search(exp, i)):
ls.append(i)마지막으로
isin()메서드를 사용해 원본 시리즈에서 해당 값들만 추출합니다.
예제 코드
아래 예제를 통해 실제 구현 방법을 자세히 살펴보겠습니다.
import pandas as pd
import re
l = ["apple","oranges","alpha","aroma","beta"]
data = pd.Series(l)
exp = r'^[a]$|^([a]).*\1$'
ls = []
for i in data:
if(re.search(exp, i)):
ls.append(i)
print(data[data.isin(ls)])실행 결과
2 alpha 3 aroma dtype: object
방법 2: filter()와 람다(lambda) 함수 활용
두 번째 방법은 파이썬 내장 함수인 filter()와 람다 표현식을 조합하는 것입니다. 코드가 더 간결하고 가독성이 좋습니다.
startswith('a')로 시작 여부를 확인합니다.endswith('a')로 끝나는지 여부를 확인합니다.두 조건을 모두 만족하는 요소만 필터링한 후,
isin()으로 시리즈를 걸러냅니다.
예제 코드
import pandas as pd
import re
l = ["apple","oranges","alpha","aroma","beta"]
data = pd.Series(l)
result = list(filter(lambda x:x.startswith('a') and x.endswith('a'),l))
print(data[data.isin(result)])실행 결과
2 alpha 3 aroma dtype: object
마무리
이처럼 'a'로 시작하고 끝나는 문자열을 필터링하는 데에는 두 가지 접근 방식이 있습니다. 정규식을 활용하면 복잡한 패턴 매칭에 유연하게 대응할 수 있고, filter()와 람다 함수를 사용하면 코드가 직관적이고 간단해집니다. 상황에 맞게 적절한 방법을 선택하면 됩니다.