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

파이썬으로 판다스 시리즈에서 정확히 두 개의 공백을 포함한 요소 제거하기

문제 개요

데이터 전처리 작업을 하다 보면 문자열에 포함된 공백 개수를 기준으로 특정 요소를 걸러내야 하는 경우가 있습니다. 이 글에서는 판다스(Pandas) 시리즈(Series)에서 정확히 두 개의 공백을 포함하는 문자열 요소를 제거하는 세 가지 방법을 예제 코드와 함께 살펴보겠습니다.

입력 — 다음과 같은 시리즈가 있다고 가정해 보겠습니다.

0    This is pandas
1    python script
2    pandas series

출력 — 정확히 두 개의 공백을 포함하는 요소가 제거된 최종 결과는 다음과 같습니다.

1    python script
2    pandas series

위 예시에서 "This is pandas"는 단어 사이 공백이 정확히 두 개이므로 제거 대상이 되고, 나머지 두 요소는 그대로 유지됩니다.

해결 방법 1: lambda filter와 정규 표현식 활용

  • 먼저 Series를 정의합니다.

  • lambda filter 메서드에 정규 표현식을 적용하여, 공백의 개수가 2개가 아닌 요소만 추출합니다.

pd.Series(filter(lambda x:len(re.findall(r" ",x))!=2,data))

여기서 re.findall(r" ", x)는 문자열 x에서 모든 공백을 찾아 리스트로 반환하며, 그 길이가 곧 공백의 개수가 됩니다. 이 값이 2가 아니면 필터를 통과하게 됩니다.

  • 마지막으로 isin() 함수를 사용해 원본 시리즈에서 필터링된 결과에 해당하는 값들만 선택합니다.

해결 방법 2: for 반복문과 count() 활용

  • Series를 정의합니다.

  • for 반복문으로 요소를 하나씩 순회하면서, if 조건문으로 해당 문자열의 공백 개수가 2인지 확인합니다. 조건에 맞는 요소는 pop() 메서드로 제거합니다.

for i,j in data.items():
   if(j.count(' ')==2):
      data.pop(i)

j.count(' ')는 문자열 내 공백 문자의 개수를 직접 세어주므로, 정규 표현식 없이도 간단하게 조건을 검사할 수 있다는 장점이 있습니다.

예제 코드

아래 구현 예제를 통해 더 자세히 이해해 보겠습니다.

import pandas as pd
import re
l = ["This is pandas","python script","pandas series"]
data = pd.Series(l)
result = pd.Series(filter(lambda x:len(re.findall(r" ",x))!=2,data))
print(data[data.isin(result)])

실행 결과

1    python script
2    pandas series
dtype: object

해결 방법 3: 반복문 방식의 전체 구현

두 번째 방법을 실제로 적용한 전체 코드는 다음과 같습니다.

import pandas as pd
l = ["This is pandas","python script","pandas Series"]
data = pd.Series(l)
for i,j in data.items():
   if(j.count(' ')==2):
      data.pop(i)
print(data)

실행 결과

1    python script
2    pandas series
dtype: object

마무리

정리하면, 첫 번째 방법은 filter()와 정규 표현식을 조합해 함수형 스타일로 처리하고, 두 번째와 세 번째 방법은 items()로 인덱스와 값을 순회하며 count()로 조건을 검사한 뒤 pop()으로 제거합니다. 데이터 크기가 크다면 불변 방식인 첫 번째 방법이, 코드 가독성을 중시한다면 반복문 방식이 유용할 수 있습니다. 상황에 맞는 방법을 선택해 활용해 보시기 바랍니다.