본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python 벡터화 내장된 문자열 메서드(str)

728x90
반응형

백터화 내장된 문자열 메서드

  - pandas 제공

  - 기본 문자열 메서드가 벡터화가 불가능한 점을 보완

  - 시리즈만 호출 가능(DataFrame 호출 불가, 리턴 형태도 Series)

  - str.______  형태로 호출(ex. s1.str.upper())

 

 

 

1. 대소 치환

위와 같은 방법은 에러가 발생한다.

 

 

그래서 map과 lambda를 사용하여 각 행마다의 lower 가 적용되도록 했다. 

그러나 이제는 str인 벡터화 내장된 문자열 메서드를 사용하면 해결된다.

 

 

 

 

dir(e1.str)  로 벡터화 내장된 문자열 메서드 목록을 확인할 수 있다.

 

 

 

 

 

2. 벡터화 내장된 색인 ★

입사일에서 입사연도만 추출해보겠다.

위처럼 수행하면 Series에서 4개의 원소를 출력한다는 의미이므로 틀린 방법이다.

 

 

map을 통해 Series의 원소를 함수에 전달하여 각각 추출이 가능하다.

 

 

 

이제는 벡터화 내장된 색인으로 처리가 가능하다.

 

 

 

 

3. 문자열 분리

 

위 방법은 불가하다.

 

 

 

map과 lambda의 결합으로 풀이가 가능하다.

 

 

 

 

앞으로는 위와 같은 방법으로 처리하겠다.

 

 

 

 

4. 문자열 치환

  - str.replace(old, new) 로 처리

  - old, new는 스칼라(문자열)만 가능

 

 

str을 사용한 문자열 치환 방식이다.

 

 

std['TEL']은 student.csv 파일의 TEL 컬럼인데, 학생들의 전화번호가 담겨있다. 여기서 지역번호를 XXX로 치환하고자 하는데, NaN이 뜬다. 왜냐하면 old value에는 seires가 들어갈 수 없기 때문이다. 그렇게 되면 제대로 된 치환이 불가하여 모두 NA가 출력된 것이다.

 

 

 

예) 데이터 프레임에 문자열 메서드 전달

str.____ 형태로 제공되는 "벡터화 내장된 문자열 메서드"는 시리즈만이 호출 가능하므로 2차원 구조인 데이터프레임에 문자열 메서드 전체 적용시에는 "벡터화 내장된 문자열 메서드"가 아닌 "기본 문자열 메서드"를 사용한다.

 

 

 

card 데이터프레임에서 쉼표(,)를 제거하여보자.

 

위 방법으로는 해결되지 않는다.

데이터프레임이 호출한 replace는 값치환 메서드이므로 문자열의 일부 치환이 불가하다. 에러는 발생하지 않지만 아무것도 변경되지 않는다.

 

 

applymap과 lambda의 결합으로 해결하였다.

 

 

위에서 설명했다시피 card는 데이터프레임이기 때문에 str을 사용할 수 없다.

 

 

 

따라서 기본 문자열 메서드인 replace를 사용하기 위해서는 applymap과 lambda의 결합인 위 방법을 사용하면 되겠고, str.replace를 사용하기 위해서는 series 형태가 input 될 수 있도록 apply와 lambda의 결합을 사용하면 된다.

apply와 lambda의 결합은 아래와 같다.

 

 

 

 

728x90

 

 

replace에 대하여 간단히 정리해보자

1) 기본 문자열 형식의 replace

  - 스칼라만 가능, 문자열의 일부를 치환할 수 있다.

 

2) 값치환 메서드

  - 데이터프레임 호출 가능

  - 완전히 일치하는 값만 치환 가능

 

3) str.replace

  - 1번이 확장된 느낌

  - 일부 치환 가능

 

 

 

5. 횟수/길이

1) 문자열 길이

문자열의 길이는 len을 사용한다.

 

시리즈가 들어가게 되면 시리즈의 원소의 수가 출력된다.

 

 

 

여기서 len 메서드를 사용하면 매 원소마다의 문자열 길이를 추출할 수 있다.

 

 

 

 

 

2) 문자열 포함 횟수

count는 해당 문자가 몇 개 포함되는지 출력해주는 메서드이다.

 

str과 함께 사용하면 series에서도 조건에 맞는 결과 출력이 가능하다.

 

 

 

예제) student.csv  파일을 읽고 전화번호에서 국번을 마스킹 처리하여라.

 

str은 사용하지 않고 풀이하였다.

 

 

사실 이 문제는 str을 사용하면 복잡해지기 때문이다.

이러한 방식으로 접근을 하여야 한다.

 

 

 

 

6. 문자열 포함 ★

  - str.contains로 처리(기본 문자열 베서드에서는 제공되지 않음

  - 기본 문자열 포함관계는 in 연산자로 가능

 

 

 

예제) emp의 ename에 A를 포함한 직원의 이름, 부서번호를 출력하여라.

이렇게 해결 가능하다.

 

 

다른 방법도 많다.

 

또는,

 

 

 

따라서 정리하면,

'A' in 'ALLEN'    은 문자열(스칼라)의 포함관계

emp['ENAME'].str.contains('A')   은 시리즈의 각 원소의 문자열 포함관계 확인

 

 

 

 

7. 문자열 결합

  - 기본 문자열 메서드는 문자열 결합 메서드가 존재하지 않는다 → 문자열 + 문자열로 전달이 가능

  - 기본 문자열 메서드의 join 메서드가 분리구분기호를 반복해서 전달하여 결합해주는 기능을 한다.

  - str.cat(기본 문자열 메서드에는 없음), str.join 메서드로 등장

 

 

 

예) 기본 문자열의 결합

'a' + 'b'

 

 

예) 시리즈 원소의 결합

매 원소별 결합(분리구분기호로 호출하는 형태)

 

sep 옵션은 꼭 써주어야 한다. 매 원소별 별합(분리구분기호가 cat 메서드 안에 전달됨)

 

 

 

예) 시리즈 원소 내부 결합

위와 같은 시리즈를 정의하였다.

 

이 경우는 에러가 난다. str.cat 메서드는 문자열 시리즈의 문자열 연결에 사용되는데 여기서는 리스트가 포함된 혼합된 데이터 유형이므로 적용되지 않는다.

 

 

join을 사용하면 가로방향 결합이 된다.

 

 

전화번호를 추출하여 지역번호를 제거하고 국번과 전화번호 뒤 네자리를 결합하고자 할 때 사용된다.

 

 

 

 

8. 문자열 삽입

1) zfill: 왼쪽에 0을 채우는 기능

  - 기본 문자열 메서드, 벡터화 내장된 문자열 메서드 모두 제공

 

 

 

 

2) rjust, ljust: 반대 방향에 문자열을 채우는 기능

  - 기본 문자열 메서드, 벡터화 내장된 문자열 메서드 모두 제공

 

 

이렇게 테스트가 가능하다.

 

 

 

3) pad: 양방향 문자열 채우는 기능

  - 벡터화 내장된 문자열 메서드에만 제공

 

mon.str.pad(width,             # 총길이

                    side = 'left',    # 채울 방향 [left, right, both]

                    fillchar = ' ')    # 채울 문자열

 

 

 

반응형

 

 

 

연습문제

movie_ex1.csv 파일을 읽고 년월일 컬럼을 결합하여 새로운 '날짜' 컬럼을 생성하여라(맨 앞에 배치), 그리고 년, 월, 일 컬럼을 제거하여라(2018/02/01 형태로 생성)

 

 

날짜 컬럼 생성

 

 

 

년/월/일 컬럼 삭제

 

 

 

 

컬럼 재배치

 

728x90
반응형