본문 바로가기
프로그래밍/Python 관련 정보

[Pandas 기초] Pandas.str 속성

by TrillionNT 2025. 4. 24.

2025.02.24 - [프로그래밍/Python 관련 정보] - [Pandas] Table of Contents


pandas의 .str 속성은 Series(혹은 Index) 객체에 대해 벡터화된 문자열 연산을 수행할 수 있도록 해주는 속성입니다. 일반적인 Python 문자열 메서드를 그대로 사용할 수 있으며, 결측치(NA)는 기본적으로 NA로 유지됩니다. 문자열 타입에만 적용됩니다. 

 

1. str.replace(old, new, regex=False, case=True, na=True, ...)

: 문자열의 특정 부분을 다른 문자열로 대체합니다. regex=True를 설정하면 정규 표현식을 사용할 수 있습니다. 

 

2. str.len()

: 문자열의 길이를 반환합니다. 

 

3. str[i]

: 문자열 인덱싱을 사용하여 특정 위치의 문자를 반환합니다

 

4. str.count(substring, case=True, na=True)

: 문자열에 특정 문자열이 몇 번 나타나는지 카운트합니다. 

 

5. str.find(substring, start=None, end=None, case=True)

: 문자열에서 특정 문자열의 첫 번째 위치를 찾습니다. 

 

6. str.lower()/str.upper()

: 문자열을 소문자 또는 대문자로 변환합니다. 

 

 

사실, str 속성을 꼭 사용하지 않아도 됩니다. 예를들어 str.len() 대신 lambda 함수를 사용할 수도 있겠죠. 

df['len_lambda'] = df['col'].apply(lambda x: len(x) if pd.notnull(x) else None)

 

 

str 속성을 사용하는 다양한 예시는 아래와 같습니다. 

import pandas as pd

# 예제 DataFrame 생성
df = pd.DataFrame({
    'name': ['Alice', 'Bob', None, 'Charlie_Doe'],
    'email': ['alice@example.com', 'bob123@site.org', 'nobody@none', None]
})

# 1) 소문자 변환
df['name_lower'] = df['name'].str.lower()
# 결과: ['alice', 'bob', NaN, 'charlie_doe']

# 2) 문자열 길이 측정
df['email_len'] = df['email'].str.len()
# 결과: [17, 16, 12, NaN]

# 3) 특정 패턴 포함 여부 (contains)
df['has_dot'] = df['email'].str.contains(r'\.', na=False)
# 결과: [True, True, False, False]

# 4) 언더스코어로 분할 후 첫 번째 요소 추출
df['first_part'] = df['name'].str.split('_').str.get(0)
# 결과: ['Alice', 'Bob', None, 'Charlie']

# 5) 정규표현식 그룹 추출 (도메인만)
df['domain'] = df['email'].str.extract(r'@(.+)$', expand=False)
# 결과: ['example.com', 'site.org', 'none', NaN]

# 6) 결합 (cat)
df['contact'] = df['name'].str.cat(df['email'], sep=' | ', na_rep='[missing]')
# 결과: ['Alice | alice@example.com', 'Bob | bob123@site.org', '[missing] | nobody@none', 'Charlie_Doe | [missing]']