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

파이썬 Pandas로 시리즈(Series)에서 정수 요소만 필터링하는 방법

데이터 분석 작업을 하다 보면 문자열과 숫자가 뒤섞인 시리즈(Series)에서 정수 값만 골라내야 하는 경우가 자주 발생합니다. 이 글에서는 파이썬의 Pandas 라이브러리를 활용해 혼합형 시리즈에서 정수 요소만 효과적으로 필터링하는 두 가지 방법을 소개합니다.

문제 상황

다음과 같이 정수와 문자열이 섞여 있는 시리즈가 있다고 가정해 보겠습니다.

입력(Input)

0    1
1    2
2    python
3    pandas
4    3
5    4
6    5

출력(Output) — 정수 요소만 필터링한 결과는 다음과 같습니다.

0    1
1    2
4    3
5    4
6    5

해결 방법 1: 타입 검사를 활용한 반복 처리

가장 직관적인 방법은 각 요소의 데이터 타입을 검사하는 것입니다. 시리즈를 순회하면서 해당 요소가 int 타입인지 확인하고, 정수인 경우에만 인덱스와 값을 출력합니다.

예제 코드

import pandas as pd
ls = [1,2,"python","pandas",3,4,5]
data = pd.Series(ls)
for i,j in data.items():
   if(type(j)==int):
      print(i,j)

실행 결과

0    1
1    2
4    3
5    4
6    5

data.items() 메서드는 인덱스와 값을 함께 반환하므로, 조건문으로 int 타입 여부만 판별하면 손쉽게 원하는 결과를 얻을 수 있습니다.

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

조금 더 함수형 프로그래밍 스타일로 접근하고 싶다면 filter() 함수와 lambda, 그리고 정규표현식(re 모듈)을 조합할 수 있습니다. 이 방법은 다음 단계로 진행됩니다.

  • 먼저 리스트로부터 pd.Series 객체를 생성합니다.

  • filter() 안에 lambda 함수를 적용하고, 정규표현식 r"\d+"로 숫자 여부를 검사합니다. 정규표현식은 문자열에만 동작하므로 모든 요소를 str()로 변환해야 합니다.

  • 마지막으로 isin() 함수를 사용해 원본 시리즈에서 필터링된 값과 일치하는 요소만 추출합니다.

예제 코드

import pandas as pd
import re
ls = [1,2,"python","pandas",3,4,5]
data = pd.Series(ls)
result = pd.Series(filter(lambda x:re.match(r"\d+",str(x)),data))
print(data[data.isin(result)])

실행 결과

0 1
1 2
4 3
5 4
6 5

마무리

두 방법 모두 동일한 결과를 제공하지만, 상황에 따라 선택 기준이 달라질 수 있습니다. 코드의 가독성과 단순함이 중요하다면 타입 검사 방식이 적합하고, 정규표현식 기반의 유연한 패턴 매칭이 필요하거나 함수형 스타일을 선호한다면 lambda filter 방식이 유용합니다. 데이터 전처리 과정에서 혼합형 시리즈를 다룰 때 이 두 가지 기법을 적절히 활용해 보시기 바랍니다.