Pandas 시리즈(Series)에 담긴 문자열 데이터에서 특정 위치의 문자만 골라내야 할 때가 자주 있습니다. 예를 들어 아래와 같은 시리즈가 있을 때, 각 요소에서 일정한 간격으로 문자를 추출하면 다음과 같은 결과를 얻습니다.
0 Ap 1 Oa 2 Mn 3 Kw
이 글에서는 이 문제를 해결하는 두 가지 방법을 소개합니다.
해결 방법 1: str.slice() 함수 사용
str.slice()는 Pandas에서 제공하는 벡터화된 문자열 처리 함수입니다. 시작 위치(start), 종료 위치(stop), 간격(step)을 지정하면 시리즈의 모든 요소에서 한 번에 부분 문자열을 추출할 수 있습니다.
- 먼저 문자열 값을 가진 시리즈를 정의합니다.
start=0,stop=4,step=2를 지정하여str.slice()를 적용합니다.
data.str.slice(start=0, stop=4, step=2)
이 설정은 인덱스 0부터 4 미만까지 2칸씩 건너뛰며 문자를 가져오므로, 각 문자열의 0번째와 2번째 문자만 선택됩니다.
예제 코드
import pandas as pd data = pd.Series(['Apple', 'Orange', 'Mango', 'Kiwis']) print(data.str.slice(start=0, stop=4, step=2))
출력 결과
0 Ap 1 Oa 2 Mn 3 Kw
'Apple'에서는 0번째 'A'와 2번째 'p'가 선택되어 'Ap'가 되고, 나머지 문자열도 같은 방식으로 처리됩니다.
해결 방법 2: 인덱스 슬라이싱 사용
Python의 기본 슬라이싱 문법인 [시작:끝:간격]을 그대로 활용할 수도 있습니다. .str 접근자 뒤에 대괄호 슬라이싱을 붙이면 str.slice()와 동일한 결과를 더 간결한 코드로 얻을 수 있습니다.
data.str[0:4:2]
예제 코드
import pandas as pd data = pd.Series(['Apple', 'Orange', 'Mango', 'Kiwis']) print(data.str[0:4:2])
출력 결과
0 Ap 1 Oa 2 Mn 3 Kw
마무리
두 방법 모두 완전히 동일한 결과를 반환합니다. str.slice()는 키워드 인자를 사용해 의미가 명확하고 가독성이 좋은 반면, 대괄호 슬라이싱은 코드가 짧고 직관적이라는 장점이 있습니다. 참고로 stop 값이 실제 문자열 길이보다 커도 오류 없이 자동으로 처리되므로, 길이가 제각각인 문자열 데이터에도 안전하게 사용할 수 있습니다.