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

파이썬 Pandas로 시리즈의 문자와 숫자를 분리하여 데이터프레임으로 변환하는 방법

데이터 전처리 작업을 하다 보면 'abx123'처럼 문자와 숫자가 섞여 있는 문자열 데이터를 만나게 됩니다. 이런 경우 정규표현식(Regular Expression)을 활용하면 문자 부분과 숫자 부분을 손쉽게 분리할 수 있습니다.

이 글에서는 판다스(Pandas)의 str.extract() 메서드를 사용해 시리즈(Series)에서 알파벳과 숫자를 분리하고, 그 결과를 데이터프레임(DataFrame)으로 저장하는 방법을 알아보겠습니다.

문제 상황

다음과 같은 시리즈가 있다고 가정해 봅시다. 각 요소는 알파벳과 숫자가 결합된 문자열입니다.

series is:
0    abx123
1    bcd25
2    cxy30
dtype: object

목표는 각 문자열에서 알파벳 부분과 숫자 부분을 분리하여 아래처럼 두 개의 열을 가진 데이터프레임을 만드는 것입니다.

Dataframe is
     0     1
0  abx   123
1  bcd    25
2  cxy    30

해결 방법

해결 절차는 다음과 같습니다.

  • 알파벳과 숫자가 섞인 문자열로 시리즈를 정의합니다.

  • str.extract() 메서드 안에 정규표현식 패턴을 적용해 알파벳과 숫자를 분리한 뒤, 결과를 데이터프레임에 저장합니다.

정규표현식 패턴 이해하기

핵심 코드는 다음 한 줄입니다.

series.str.extract(r'(\w+[a-z])(\d+)')

패턴을 하나씩 살펴보면:

  • (\w+[a-z]) : 첫 번째 그룹으로, 단어 문자(\w)가 반복된 뒤 소문자 알파벳 [a-z]로 끝나는 부분, 즉 알파벳 부분을 추출합니다.

  • (\d+) : 두 번째 그룹으로, 숫자(digit)가 하나 이상 연속되는 부분을 추출합니다.

str.extract()는 괄호로 묶인 캡처 그룹 개수만큼 열(column)을 생성하므로, 위 패턴은 자동으로 2개의 열을 가진 데이터프레임을 반환합니다.

전체 예제 코드

아래는 실제 동작 과정을 확인할 수 있는 전체 구현 예제입니다.

import pandas as pd

# 시리즈 정의
series = pd.Series(['abx123', 'bcd25', 'cxy30'])
print("series is:\n", series)

# 정규표현식으로 알파벳과 숫자 분리 후 데이터프레임으로 변환
df = series.str.extract(r'(\w+[a-z])(\d+)')
print("Dataframe is\n:", df)

실행 결과

series is:
0    abx123
1    bcd25
2    cxy30
dtype: object
Dataframe is
:    0    1
0  abx  123
1  bcd   25
2  cxy   30

마무리

이처럼 판다스의 str.extract() 메서드와 정규표현식을 조합하면 복잡한 반복문 없이도 문자열에서 원하는 패턴을 깔끔하게 추출할 수 있습니다. 특히 로그 데이터 파싱, 제품 코드 분석, 사용자 ID 처리 등 문자열과 숫자가 혼합된 데이터를 다룰 때 매우 유용하게 활용됩니다.