📌 학습목표
1. 시리즈에 대한 문자열 함수 Series.str.
2. .str.upper(), .str.lower()
3. 문자열 슬라이싱 .str[시작 : 끝 : 스텝]
4. .str.contains()
5. .str.startswith(), .str.endswith()
6. .str.replace()
7. 인덱스에 대한 문자열 함수 .index.str.
8. 컬럼에 대한 문자열 함수 .columns.str.
🔗 실습 링크 : https://www.kaggle.com/datasets/abcsds/pokemon
Pokemon with stats
721 Pokemon with stats and types
www.kaggle.com
Series.str.
: Series에 대한 벡터화된 문자열 함수
- 문자열 메소드를 실행할 때는 `.str.메소드명()`
- 반복문을 사용하지 않고도 문자열 데이터 처리 가능(문자열 검색/치환/분리/결합 등)
- 특정 메서드에서 다르게 처리하지 않는 하 NA값은 NA상태로 유지
- `.str`은 형변환이 아니다 ! (형변환은 `.astype()`)
이미 문자열 타입의 데이터를 가지고 문자열 메서드를 실행하기 위한 중간 함수라고 생각하면 된다.
.str.upper(), .str.lower()
.str.upper()
: 문자열을 모두 대문자로 변환하여 Series 형태로 반환한다.
.str.lower()
: 문자열을 모두 소문자로 변환하여 Series 형태로 반환한다.
.str[시작 : 끝 : 스텝]
: 문자열 슬라이싱
pokemons['Name'].str[:8:2]
.str.contains()
: 문자열 Series 또는 Index에서 주어진 패턴 또는 정규식이 포함되어 있는지 확인하고 Boolean Series 또는 Index를 반환한다.
(포함되어있으면 → `True`, 포함되어있지 않으면 → `False`)
- `pat` : 찾고자 하는 문자열 또는 정규식 패턴
- `case` : 대소문자 구분 여부를 지정하는 Boolean 값
- `True` : 대소문자 구분 O ← 디폴트
- `False` : 대소문자 구분 X
- `flags` : `re` 모듈에 전달할 플래그로 정규식 패턴의 세부 제어를 설정
- `re.IGNORECASE(re.I)` : 대소문자를 구분하지 않고 패턴을 매칭
- `re.MULTILINE(re.M)` : 문자열이 여러줄일 때 각 줄의 시작과 끝에 패턴을 매칭
- `re.DOTALL(re.S)` : 줄바꿈 문자를 포함한 모든 문자와 매칭
- `re.UNICODE(re.U)` : 유니코드 문자 범위를 이해하고 매칭
- `re.VERBOSE(re.X)` : 정규식 패턴을 가독성 있게 작성할 수 있도록 여러 줄과 주석을 사용
- `na` : 결측치를 채울 방식 설정
- `None` : 채우지 않음 ← 디폴트
- `regex` : 패턴이 정규식인지를 파악할지 설정
- `True` : 패턴을 정규식으로 이해하고 처리
- `False` : 패턴을 리터럴 문자열로 이해하고 처리
# q 탐색 필터(mask랑 비슷함), 대소문자 구분 안함
q_filter = pokemons['Name'].str.contains('q', case=False)
q_filter.sum()
pokemons[q_filter]
# 여러개 검색
# saurus(파충류), Dragon(용) -> saur, ragon 이름에 들어간것 찾기
o_filter = pokemons['Name'].str.contains('saur|ragon|tle',case=False)
pokemons[o_filter]
.str.startswith(), .str.endswith()
.str.startswith()
: 문자열 Series 또는 Index가 지정된 문자열로 시작하면 `True`를, 아니라면 `False`를 반환하는 메소드
- `pat` : 찾을 문자열 (정규 표현식은 지원하지 않음, 대소문자 구분함)
- `na` : 결측치를 채울 방식 설정
- `None` : 채우지 않음 ← 디폴트
# 1가지 탐색
start_filter1 = pokemons['Name'].str.startswith('Q')
pokemons[start_filter1]
# 2가지 이상 탐색 -> 튜플로 접근
start_filter2 = pokemons['Name'].str.startswith(('Q','Pid'))
pokemons[start_filter2]
.str.endswith()
: 문자열 Series 또는 Index가 지정된 문자열로 끝나면 `True`를, 아니라면 `False`를 반환하는 메소드
.str.replace()
: 문자열 Series 또는 Index에서 지정된 문자열로 대체하는 메소드
- `pat` : 문자열 또는 정규 표현식 지정
- `repl` : 대체할 문자열
- `n` : 몇 개를 대체할 것인지 개수 지정
- `-1` : 전부 대체 ← 디폴트
- int : 지정된 개수만큼
- `case` : 대소문자 구분 여부를 지정하는 Boolean 값
- `True` : 대소문자 구분 O ← 디폴트
- `False` : 대소문자 구분 X
- `flags`
- `regex` : 패턴이 정규식인지를 파악할지 설정
- `True` : 패턴을 정규식으로 이해하고 처리
- `False` : 패턴을 리터럴 문자열로 이해하고 처리
# 'Fire'을 'Flame'으로 대체한 후 복사본에 적용
pokemons_copy = pokemons.copy()
pokemons_copy['Type 1'] = pokemons_copy['Type 1'].str.replace('Fire', 'Flame')
# 필터 생성해서 Flame이 포함된 'Type 1'만 조회하도록 함
flame_filter = pokemons_copy['Type 1'].str.contains('Flame')
pokemons_copy[flame_filter].head()
Series와 마찬가지로 Index와 Columns에 대해서도 `.str.` 문자열 함수를 사용할 수 있다.
.index.str.
: Index에 대한 벡터화된 문자열 함수
# 실습을 위해서 Name을 ID로 설정
pokemons.set_index('Name', inplace=True)
# 인덱스 슬라이싱 -> 인덱스 객체로 반환된다.
pokemons.index.str[:5]
.columns.str.
: 열(컬럼)에 대한 벡터화된 문자열 함수
# 컬럼명을 모두 대문자로 변환, 변경된 값을 컬럼에 반영
pokemons.columns = pokemons.columns.str.upper()
pokemons.head()