본문 바로가기

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

[복습] Python 파이썬에서의 join(pd.merge) (1)

728x90
반응형

- R의 join과 유사

- 세 객체 이상의 조인 불가

- non-equi join 불가

 

 

pd.merge(left,                          # 첫 번째 join 대상(dataframe, series)

                right,                         # 두 번째 join 대상(dataframe, series)

                how = inner,             # join 방법(inner, left, right, outer(full outer join), cross)

                on,                            # join key (양쪽에 같은 이름으로 있을 경우)

                left_on,                     # 첫 번째 대상의 join key(양쪽에 같은 이름으로 있지 않을 경우)

                right_on,                   # 두 번째 대상의 join key(양쪽에 같은 이름으로 있지 않을 경우)

                left_index = False,    # 첫 번째 대상의 join key로 index 값을 사용할지 여부               

                right_index = False,  # 두 번째 대상의 join key로 index 값을 사용할지 여부               

                sort = False,             # key 정렬 여부

                suffixes)                   # 같은 이름의 컬럼일 경우 구분자

 

 

 

예) emp.csv, dept.csv 파일을 불러온 뒤 각 직원의 이름, 급여, 부서명을 출력하시오.

위에서 on = 'DEPTNO'는 생략이 가능하다.

emp와 dept 에서 DEPTNO는 이름이 같은 컬럼이며 하나씩 존재하기 때문이다.

 

 

 

예) student.csv, exam_01.csv 파일을 읽고 각 학생의 이름, 학년, 성적을 출력하여라.

 

 

 

예) student.csv, professor.csv 파일을 읽고 각 학생의 이름, 학년, 지도교수이름을 출력하여라.

 

위처럼 std, pro만 넣게 되면, 빈 프레임이 출력된다. 

이렇게 되는 이유는 std와 pro 각각 NAME, PROFNO, ID 의 두 값이 같은 행이 출력되도록 한 것인데, NAME은 학생 이름과 교수 이름으로 각각 다르며, ID도 마찬가지이다. 우리가 join 하고자 하는 것은 PROFNO 이므로 이 내용을 다시 코드로 잘 전달하여보자.

 

 

 

on 옵션을 사용하여 PROFNO 를 전달하여 출력했다.

위 결과는 inner join으로 교수가 배정되지 않은 학생은 출력이 되지 않는다.

 

이번엔 교수가 배정되지 않은 학생도 출력되도록 outer join을 수행하여 보겠다.

how = 'left' 로 전달하면 left outer join이 수행된다.

728x90
반응형