포스팅 목차
71. Replace every occurrence of alphabet A with B in the string Allen’s (user translate function).
* 문자열('Allens')에서 알파벳 문자 'A'를 모두 문자 'b'로 변경하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [문자 함수] 문자열에서 특정 문자 변경
|
1. Oracle(오라클)
- replace 함수를 사용하여서 문자열 'Allens'에서 문자 'A'를 모두 문자 'b'로 변경한다.
Oracle Programming |
select replace('Allens','A','b') str_replace
from dual
2. Python Pandas(파이썬)
pandas.Series.str.replace 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
Python Programming |
import copy
withmooc = copy.copy(emp)
withmooc
withmooc['ename_replace'] = withmooc['ename'].str.replace('A','b')
display(withmooc.head())
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | ename_replace | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 | SMITH |
1 | 7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 | bLLEN |
2 | 7521 | WARD | SALESMAN | 7698.0 | 1981/02/22 | 1250 | 500.0 | 30 | WbRD |
3 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 | JONES |
4 | 7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 | MbRTIN |
pandas.Series.str.translate 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
str.maketrans() 는 변경 대상 문자와 변경하기 위한 새로운 문자에 대한 딕셔너리 형태의 변환 테이블을 생성하고, str.translate() 함수는 생성된 변환테이블을 사용하여서 문자열에서 문자를 변경한다.
Python Programming |
import copy
withmooc = copy.copy(emp)
withmooc
# 변환 테이블 생성을 위하여 변경 대상 문자와 변경하기 위한 문자를 딕셔너리로 생성
trans_dict ={"A": "b", "E":"e"}
# 위에서 생성한 딕셔너리를 변환 테이블로 생성한다.
trans_table ="abc".maketrans(trans_dict)
display(trans_table)
# 변환 테이블을 사용하여서 문자열에서 문자 "A"는 "b"로 문자 "E"는 "e"로 변경한다.
withmooc['ename_replace'] = withmooc['ename'].str.translate(trans_table)
display(withmooc.head())
Results |
{65: 'b', 69: 'e'}
empno | ename | job | mgr | hiredate | sal | comm | deptno | ename_replace | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 | SMITH |
1 | 7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 | bLLeN |
2 | 7521 | WARD | SALESMAN | 7698.0 | 1981/02/22 | 1250 | 500.0 | 30 | WbRD |
3 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 | JONeS |
4 | 7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 | MbRTIN |
3. R Programming (R Package)
- string Vs Base 함수 : https://stringr.tidyverse.org/articles/from-base.html
base::gsub 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
R Programming |
%%R
withmooc <- emp
withmooc['ename_replace'] = base::gsub("A", "b", withmooc$ename, fixed=TRUE)
head(withmooc)
Results |
# A tibble: 6 x 9
empno ename job mgr hiredate sal comm deptno ename_replace
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl> <chr>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20 SMITH
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 bLLEN
3 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 WbRD
4 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20 JONES
5 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 MbRTIN
6 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30 BLbKE
stringi::stri_locate_all 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
R Programming |
%%R
# install.packages("stringr")
library(stringr)
withmooc <- emp
withmooc['ename_replace'] = lapply(withmooc['ename'], function(x) str_replace_all(x, "A" , "b") )
head(withmooc)
Results |
# A tibble: 6 x 9
empno ename job mgr hiredate sal comm deptno ename_replace
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl> <chr>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20 SMITH
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 bLLEN
3 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 WbRD
4 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20 JONES
5 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 MbRTIN
6 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30 BLbKE
4. R Dplyr Package
stringi::stri_locate_all 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
R Programming |
%%R
emp %>%
dplyr::mutate(ename_replace = str_replace_all( ename, "A" , "b" )) %>%
head()
Results |
# A tibble: 6 x 9
empno ename job mgr hiredate sal comm deptno ename_replace
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl> <chr>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20 SMITH
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 bLLEN
3 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 WbRD
4 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20 JONES
5 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 MbRTIN
6 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30 BLbKE
base::gsub 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
R Programming |
%%R
emp %>%
dplyr::mutate(ename_replace = base::gsub("A", "b", ename, fixed=TRUE)) %>%
head()
Results |
# A tibble: 6 x 9
empno ename job mgr hiredate sal comm deptno ename_replace
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl> <chr>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20 SMITH
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 bLLEN
3 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 WbRD
4 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20 JONES
5 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 MbRTIN
6 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30 BLbKE
5. R sqldf Package
replace 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
R Programming |
%%R
sqldf("select replace(ename,'A','b') ename_replace from emp;") %>% head()
Results |
ename_replace
1 SMITH
2 bLLEN
3 WbRD
4 JONES
5 MbRTIN
6 BLbKE
6. Python pandasql Package
- replace 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
Python Programming |
ps.sqldf("select replace(ename,'A','b') ename_replace from emp").head()
Results |
ename_replace | |
0 | SMITH |
1 | bLLEN |
2 | WbRD |
3 | JONES |
4 | MbRTIN |
7. R data.table Package
stringi::stri_locate_all 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
R Programming |
%%R
DT <- data.table(emp)
DT[,ename_str := str_replace_all( ename, "A" , "b" )][1:7, ]
Results |
empno ename job mgr hiredate sal comm deptno ename_str
1: 7369 SMITH CLERK 7902 1980-12-17 800 NA 20 SMITH
2: 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 bLLEN
3: 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 WbRD
4: 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20 JONES
5: 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 MbRTIN
6: 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30 BLbKE
7: 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10 CLbRK
8. SAS Proc SQL
Translate(), Tranwrd(), Prxchange() 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select ename,
translate(ename, 'A', 'b') as ename_translate,
tranwrd(ename, 'A', 'b') as ename_tranwrd,
prxchange('s/A/b/', -1, ename) as ename_replace
from emp;
QUIT;
PROC PRINT data=STATSAS_1(obs=3);RUN;
Results |
OBS | ename | ename_translate | ename_tranwrd | ename_replace |
1 | SMITH | SMITH | SMITH | SMITH |
2 | ALLEN | ALLEN | bLLEN | bLLEN |
3 | WARD | WARD | WbRD | WbRD |
9. SAS Data Step
Translate(), Tranwrd(), Prxchange() 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
SAS Programming |
%%SAS sas
DATA STATSAS_2;
SET emp;
ename_translate = translate(ename, 'A', 'b');
ename_tranwrd = tranwrd(ename, 'A', 'b');
ename_replace = prxchange('s/A/b/', -1, ename);
keep ename empno ename_translate ename_tranwrd ename_replace;
RUN;
PROC PRINT data=STATSAS_2(obs=3);RUN;
Results |
OBS | empno | ename | ename_translate | ename_tranwrd | ename_replace |
1 | 7369 | SMITH | SMITH | SMITH | SMITH |
2 | 7499 | ALLEN | ALLEN | bLLEN | bLLEN |
3 | 7521 | WARD | WARD | WbRD | WbRD |
10. Python Dfply Package
replace 함수를 사용하여서 사원 이름(ename)에서 문자 'A'를 모두 문자 'b'로 변경한다.
Python Programming |
emp >> \
mutate( ename_replace = X.ename.str.replace('A','b') ) >> head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | ename_replace | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 | SMITH |
1 | 7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 | bLLEN |
2 | 7521 | WARD | SALESMAN | 7698.0 | 1981/02/22 | 1250 | 500.0 | 30 | WbRD |
3 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 | JONES |
4 | 7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 | MbRTIN |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
'통계프로그램 비교 시리즈 > 프로그래밍비교(Oracle,Python,R,SAS)' 카테고리의 다른 글
[데이터 전처리- 문자함수 예제] 코드테이블 결합과 조건문 - 73 (0) | 2021.08.30 |
---|---|
[데이터 전처리- 문자함수 예제] 문자열 변경 - 72 (0) | 2021.08.30 |
[데이터 전처리- 문자함수 예제] 기준 문자열에서 특정 문자 검색 - 70 (0) | 2021.08.30 |
[데이터 전처리- 문자함수 예제] 문자열 절단 함수를 사용하여 문자열 자르기 - 69 (0) | 2021.08.27 |
[데이터 전처리- 문자함수 예제] 문자열 결합(||) & 문자열 연결 - 68 (0) | 2021.08.27 |
댓글