본문 바로가기
통계프로그램 비교 시리즈/프로그래밍비교(Oracle,Python,R,SAS)

[데이터 전처리- 문자함수 예제] 문자열에서 특정 문자 변경 - 71

by 기서무나구물 2021. 8. 30.

포스팅 목차

     

    71. Replace every occurrence of alphabet A with B in the string Allen’s (user translate function).

     

    * 문자열('Allens')에서 알파벳 문자 'A'를 모두 문자 'b'로 변경하시오.


    • Oracle : replace() 함수
    • 파이썬 Pandas : .str.replace() 함수, maketrans(), .str.translate()
    • R 프로그래밍 : base::gsub(), lapply(), function(x) 사용자 정의 함수, str_replace_all()
    • R Dplyr Package : str_replace_all() 함수, base::gsub() 함수
    • R sqldf Package : replace() 함수
    • Python pandasql Package : replace() 함수
    • R data.table Package : str_replace_all() 함수
    • SAS Proc SQL : translate(), tranwrd(), prxchange() 함수(정규식 함수)
    • SAS Data Step : translate(), tranwrd(), prxchange() 함수(정규식 함수)
    • Python Dfply Package : .str.replace()
    • 파이썬 Base 프로그래밍 :

     


    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)

    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 예제로 만나는 테이블 데이터 처리 방법 리스트

    반응형

    댓글