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

[데이터 전처리- 문자함수 예제] 문자열 결합(||) & 문자열 연결 - 68

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

포스팅 목차

    68. Display the name of the employee concatenate with EMP no.

     

    * 사원번호와 직원의 이름을 연결(결합)하여 출력하시오.


    • Oracle : 파이프(||) 연산자, concat() 함수
    • 파이썬 Pandas : apply(), lambda 함수, .format(), + 연산자, .str.cat, .join, lambda 함수,
    • R 프로그래밍 : paste(), paste0()
    • R Dplyr Package : tidyr::unite(), stringi::stri_join(), stringr::str_c(), base::paste(), base::paste0()
    • R sqldf Package : 파이프(||) 연산자
    • Python pandasql Package : 파이프(||) 연산자
    • R data.table Package : base::paste(), stringr::str_c()
    • SAS Proc SQL : 파이프(||) 연산자, cat() 함수, Cats() 함수
    • SAS Data Step : 파이프(||) 연산자, cat() 함수, Cats() 함수
    • Python Dfply Package : + 연산자, .str.cat, mutate()
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    • 파이프 연산자를 사용하여서 사원 이름과 사원번호를 결합한다.
    Oracle Programming
    select ename,empno,
           ename||empno ename_concat
    from   emp;

     


    Oracle Programming
    select concat(ename,empno) ename_concat 
    from   emp;

     


    2. Python Pandas(파이썬)

    Python Programming
    withmooc[['ename', 'empno']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1).head()

     

    Results
    0     SMITH7369
    1     ALLEN7499
    2      WARD7521
    3     JONES7566
    4    MARTIN7654
    dtype: object

     


    • 다양한 문자열 결합 방식으로 2개 문자열을 결합하여 출력 할수 있다.
    Python Programming
    withmooc['str_combined_1'] = withmooc['ename'] + withmooc['empno'].astype(str)
    withmooc['str_combined_2'] = withmooc['ename'].str.cat(withmooc['empno'].values.astype(str), sep='')
    withmooc['str_combined_3'] = withmooc[['ename', 'empno']].astype(str).agg(''.join, axis=1)
    withmooc['str_combined_4'] = withmooc[['ename', 'empno']].apply(lambda x: ''.join(x.astype(str)), axis=1)
    withmooc['str_combined_5'] = emp[['ename','empno']].astype(str).sum(axis=1)
    withmooc['str_combined_6'] = emp.loc[:, ['ename','empno']].astype(str).sum(axis=1)
    withmooc['str_combined_7'] = withmooc[['ename', 'empno']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1)
    
    withmooc.drop(['mgr','hiredate','sal','comm','deptno','job'],axis=1).head()

     

    Results
      empno ename str_combined_1 str_combined_2 str_combined_3 str_combined_4 str_combined_5 str_combined_6 str_combined_7
    0 7369 SMITH SMITH7369 SMITH7369 SMITH7369 SMITH7369 SMITH7369 SMITH7369 SMITH7369
    1 7499 ALLEN ALLEN7499 ALLEN7499 ALLEN7499 ALLEN7499 ALLEN7499 ALLEN7499 ALLEN7499
    2 7521 WARD WARD7521 WARD7521 WARD7521 WARD7521 WARD7521 WARD7521 WARD7521
    3 7566 JONES JONES7566 JONES7566 JONES7566 JONES7566 JONES7566 JONES7566 JONES7566
    4 7654 MARTIN MARTIN7654 MARTIN7654 MARTIN7654 MARTIN7654 MARTIN7654 MARTIN7654 MARTIN7654

     


    3. R Programming (R Package)

    • paste 함수 또는 paste0 함수를 사용하여서 2개 문자열을 결합하여 출력한다.
    R Programming
    %%R
    
    withmooc <- emp
    
    withmooc['str_comb_1'] <- paste(withmooc[['ename']],withmooc[['empno']],sep="")
    withmooc['str_comb_2'] <- paste0(withmooc[['ename']],'', withmooc[['empno']])
    head(withmooc)

     

    Results
    # A tibble: 6 x 10
      empno ename  job       mgr hiredate     sal  comm deptno str_comb_1 str_comb_2
      <dbl> <chr>  <chr>   <dbl> <date>     <dbl> <dbl>  <dbl> <chr>      <chr>     
    1  7369 SMITH  CLERK    7902 1980-12-17   800    NA     20 SMITH7369  SMITH7369 
    2  7499 ALLEN  SALESM…  7698 1981-02-20  1600   300     30 ALLEN7499  ALLEN7499 
    3  7521 WARD   SALESM…  7698 1981-02-22  1250   500     30 WARD7521   WARD7521  
    4  7566 JONES  MANAGER  7839 1981-04-02  2975    NA     20 JONES7566  JONES7566 
    5  7654 MARTIN SALESM…  7698 1981-09-28  1250  1400     30 MARTIN7654 MARTIN7654
    6  7698 BLAKE  MANAGER  7839 1981-03-01  2850    NA     30 BLAKE7698  BLAKE7698 

     


    4. R Dplyr Package

    • tidyr::unite, stringi::stri_join 또는 stringr::str_c 등의 함수를 사용하여서 문자열을 결합하여 출력한다.
    R Programming
    %%R
    
    library(stringi)
    
    emp %>% 
      tidyr::unite(str_comb_1, ename, empno, sep = "", remove = FALSE) %>%
      dplyr::mutate(str_comb_2 = stringi::stri_join(ename,empno,sep="")) %>%
      dplyr::mutate(str_comb_3 = stringr::str_c(ename,empno,sep="")) %>%
      dplyr::mutate(str_comb_4 = base::paste(ename,empno,sep="")) %>%
      dplyr::mutate(str_comb_5 = base::paste0(ename,"",empno)) %>%
      dplyr::select(-(job:deptno)) %>%
      head()

     

    Results
    # A tibble: 6 x 7
      str_comb_1 empno ename  str_comb_2 str_comb_3 str_comb_4 str_comb_5
      <chr>      <dbl> <chr>  <chr>      <chr>      <chr>      <chr>     
    1 SMITH7369   7369 SMITH  SMITH7369  SMITH7369  SMITH7369  SMITH7369 
    2 ALLEN7499   7499 ALLEN  ALLEN7499  ALLEN7499  ALLEN7499  ALLEN7499 
    3 WARD7521    7521 WARD   WARD7521   WARD7521   WARD7521   WARD7521  
    4 JONES7566   7566 JONES  JONES7566  JONES7566  JONES7566  JONES7566 
    5 MARTIN7654  7654 MARTIN MARTIN7654 MARTIN7654 MARTIN7654 MARTIN7654
    6 BLAKE7698   7698 BLAKE  BLAKE7698  BLAKE7698  BLAKE7698  BLAKE7698 

     


    5. R sqldf Package

    • 파이프 연산자를 사용하여서 사원 이름과 사원번호를 결합한다.
    R Programming
    %%R
    
    sqldf("select ename||empno from emp") %>% head()

     

    Results
      ename||empno
    1  SMITH7369.0
    2  ALLEN7499.0
    3   WARD7521.0
    4  JONES7566.0
    5 MARTIN7654.0
    6  BLAKE7698.0

     


    6. Python pandasql Package

    • 파이프 연산자를 사용하여서 사원 이름과 사원번호를 결합한다.
    Python Programming
    ps.sqldf("select ename||empno concat from emp").head()

     

    Results
      concat
    0 SMITH7369
    1 ALLEN7499
    2 WARD7521
    3 JONES7566
    4 MARTIN7654

     


    7. R data.table Package

    • base::paste 또는 stringr::str_c 함수를 사용하여서 문자열을 결합하여 출력한다.
    R Programming
    %%R
    
    DT <- data.table(emp)
    
    DT[, ':='( str_combined_1 =  base::paste(ename,empno,sep="") , str_combined_2 =  stringr::str_c(ename,empno,sep="") ) ][1:7, ][,-c("hiredate","job")]

     

    Results
       empno  ename  mgr  sal comm deptno str_combined_1 str_combined_2
    1:  7369  SMITH 7902  800   NA     20      SMITH7369      SMITH7369
    2:  7499  ALLEN 7698 1600  300     30      ALLEN7499      ALLEN7499
    3:  7521   WARD 7698 1250  500     30       WARD7521       WARD7521
    4:  7566  JONES 7839 2975   NA     20      JONES7566      JONES7566
    5:  7654 MARTIN 7698 1250 1400     30     MARTIN7654     MARTIN7654
    6:  7698  BLAKE 7839 2850   NA     30      BLAKE7698      BLAKE7698
    7:  7782  CLARK 7839 2450   NA     10      CLARK7782      CLARK7782

     


    8. SAS Proc SQL

    • 파이프 연산자 또는 cat/cats 함수를 사용하여서 사원 이름과 사원번호를 결합한다.
    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select  ename||put(empno,8.)                   as emp_concat_1,
                trim(ename)||trim(left(put(empno,8.))) as emp_concat_2,
                trim(ename)||compress(put(empno,8.))   as emp_concat_3,
    
                cat(ename,empno)  as emp_cat,
                cats(ename,empno) as emp_cats
        from    emp;
    QUIT;
    PROC PRINT data=STATSAS_1(obs=3);RUN;

     

    Results
    OBS emp_concat_1 emp_concat_2 emp_concat_3 emp_cat emp_cats
    1 SMITH 7369 SMITH7369 SMITH7369 SMITH 7369 SMITH7369
    2 ALLEN 7499 ALLEN7499 ALLEN7499 ALLEN 7499 ALLEN7499
    3 WARD 7521 WARD7521 WARD7521 WARD 7521 WARD7521

     


    9. SAS Data Step

    • 파이프 연산자 또는 cat/cats 함수를 사용하여서 사원 이름과 사원번호를 결합한다.
    SAS Programming
    %%SAS sas
    
    DATA STATSAS_2; 
     SET emp;
         emp_concat_1 = ename||put(empno,8.);
         emp_concat_2 = trim(ename)||trim(left(put(empno,8.)));
         emp_concat_3 = trim(ename)||compress(put(empno,8.));
    
         emp_cat      = cat(ename,empno);
         emp_cats     = cats(ename,empno);
         keep ename empno emp_:;
    RUN;
    
    PROC PRINT data=STATSAS_2(obs=3);RUN;

     

    Results
    OBS empno ename emp_concat_1 emp_concat_2 emp_concat_3 emp_cat emp_cats
    1 7369 SMITH SMITH 7369 SMITH7369 SMITH7369 SMITH 7369 SMITH7369
    2 7499 ALLEN ALLEN 7499 ALLEN7499 ALLEN7499 ALLEN 7499 ALLEN7499
    3 7521 WARD WARD 7521 WARD7521 WARD7521 WARD 7521 WARD7521

     


    10. Python Dfply Package

    • '+' 연산자 또는 cat() 함수를 사용하여서 사원 이름과 사원번호를 결합한다.
    Python Programming
    emp >> \
      mutate( str_comb_1 = X.ename + X.empno.astype(str),
              str_comb_2 = X.ename.str.cat(X.empno.values.astype(str), sep='') ) >> \
      select(~X.hiredate,~X.job,~X.comm) >> head()

     

    Results
      empno ename mgr sal deptno str_comb_1 str_comb_2
    0 7369 SMITH 7902.0 800 20 SMITH7369 SMITH7369
    1 7499 ALLEN 7698.0 1600 30 ALLEN7499 ALLEN7499
    2 7521 WARD 7698.0 1250 30 WARD7521 WARD7521
    3 7566 JONES 7839.0 2975 20 JONES7566 JONES7566
    4 7654 MARTIN 7698.0 1250 30 MARTIN7654 MARTIN7654

     


    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트

     

    반응형

    댓글