정규식(Regular Expression, Regex)은 특정 검색 패턴을 정의하는 문자 시퀀스입니다. Pandas에서 정규식을 사용해 행을 필터링하려면 str.match() 메서드를 활용하면 됩니다.
필터링 절차
- 크기 변경이 가능한 2차원 표 형태의 데이터인 DataFrame df를 생성합니다.
- 입력 DataFrame df를 출력해 데이터 구조를 확인합니다.
- 정규식 표현식을 담을 변수 regex를 초기화합니다. 예를 들어 문자열 'J.*'는 'J'로 시작하는 모든 항목을 의미합니다.
- df.column_name.str.match(regex)를 사용해 해당 열에서 정규식과 일치하는 항목만 필터링합니다.
예제 코드
import pandas as pd
df = pd.DataFrame(
dict(
name=['John', 'Jacob', 'Tom', 'Tim', 'Ally'],
marks=[89, 23, 100, 56, 90],
subjects=["Math", "Physics", "Chemistry", "Biology", "English"]
)
)
print("입력 DataFrame:\n", df)
regex = 'J.*'
print(f"'{regex}' 적용 후 DataFrame:\n", df[df['name'].str.match(regex)])
regex = 'A.*'
print(f"'{regex}' 적용 후 DataFrame:\n", df[df['name'].str.match(regex)])
실행 결과
입력 DataFrame:
name marks subjects
0 John 89 Math
1 Jacob 23 Physics
2 Tom 100 Chemistry
3 Tim 56 Biology
4 Ally 90 English
'J.*' 적용 후 DataFrame:
name marks subjects
0 John 89 Math
1 Jacob 23 Physics
'A.*' 적용 후 DataFrame:
name marks subjects
4 Ally 90 English
추가 팁: str.match()와 str.contains()의 차이
str.match()는 문자열의 시작 부분부터 패턴이 일치해야 True를 반환하는 반면, str.contains()는 문자열 내 어느 위치에든 패턴이 포함되어 있으면 True를 반환합니다. 대소문자 구분 없이 검색하려면 case=False 옵션을, 결측값(NaN)이 있을 때의 동작을 지정하려면 na=False 옵션을 함께 활용할 수 있습니다.