pandas에서 데이터를 결합할 때 사용하는 merge(), join(), concat() 함수 사용 방법에 대해 정리해보려 한다.
다음과 같은 left, right 데이터를 사용한다.
merge() 함수를 사용하면 기본적으로 공통된 컬럼을 기준으로 inner join(내부 조인)을 수행한다.
- inner join(내부 조인): 양쪽 테이블에서 공통된 키값에 대해서만 데이터 결합
따라서 left, right의 공통된 컬럼 key를 기준으로 결합하며, b, c, e에 대해서 내부 조인을 수행한다.
left.merge(right)
내부 조인이 아닌 전체 조인(outer join)을 하고 싶으면 merge() 함수의 매개변수 how에 'outer'를 전달해 주면 된다.
- outer join(전체 조인): 공통되지 않은 값까지 모두 포함해 데이터 결합
left.merge(right, how='outer')
left, right 테이블의 모든 key 값 a~g에 대해 데이터가 결합되며, key 값에 해당하는 데이터가 없으면 NaN으로 나타난다.
left join, right join도 outer join과 마찬가지로 merge() 함수의 매개변수 how에 'left', 'right'를 전달해 주면 된다.
- left join(왼쪽 조인): 왼쪽 테이블에 있는 키값을 기준으로 오른쪽 테이블을 가져다 붙이는 형태
- right join(오른쪽 조인): 오른쪽 테이블에 있는 키값을 기준으로 왼쪽 테이블을 가져다 붙이는 형태
left.merge(right, how='left')
left.merge(right, how='right')
join() 함수는 인덱스를 기준으로 두 데이터 프레임을 결합한다.
그렇기 때문에 각 데이터 프레임에 공통된 컬럼이 존재하면 ValueError가 발생하므로, 아래 사진처럼 left, right 데이터 프레임에서 key 컬럼을 인덱스로 바꿔주었다.
join() 함수는 기본적으로 left join을 수행한다.
A.join(B)라고 작성하면, A를 기준으로 left join이 수행된다. 그러므로 어떤 데이터 프레임을 기준으로 하느냐에 따라 결과가 달라질 수 있기 때문에 코드 작성 시 유의해야 한다.
left.join(right)
left join 외 다른 join을 하고 싶으면 merge() 함수와 마찬가지로 how 매개변수에 결합 방법을 전달하면 된다.
left.join(right, how='inner')
left.join(right, how='outer')
left.join(right, how='right')
concat() 함수는 pd.concat() 형식으로 사용하며, 괄호 안에 결합할 데이터들을 리스트 형태 전달하면 행 기준(axis=0)으로 결합한다.
merge, join은 컬럼 기준, 즉 열 방향으로 결합했다면, concat은 행 방향으로 결합한다.
pd.concat([left, right])
merge, join처럼 열 방향으로 결합하고 싶으면 매개변수 axis=1을 전달하면 된다.
pd.concat([left, right], axis=1)