판다스의 DataFrame은 테이블 형식의 데이터 셋이다. 각 DataFrame이 공통 컬럼(필드)가 존제 한다면, DataFrame 끼리 Join을 할 수 있다.
Join의 방식에는 4가지가 존재한다.
1. Outer Join
2. Inner Join
3. Left Join
4. Right Join
각각의 방식을 예시 코드를 통해 어떻게 Join이 되는지 알아보자!
import pandas as pd
df1 = pd.DataFrame({'a' : ['a', 'b', 'c'],'b':[1, 2, 3]})
df2 = pd.DataFrame({'a' : ['a', 'b', 'd'],'c':['가', '나', '다']})
>> df1 = a b
0 a 1
1 b 2
2 c 3
>> df2 = a c
0 a 가
1 b 나
2 d 다
위의 예시에서 df1 과 df2 를 살펴보면 a 컬럼이 공통적으로 있으므로, key 값으로 사용하여 Join을 할 수 있다. 조인을 할 때에는 merge() 을 사용하면 된다.
1. Outer Join : 합집합
두 DataFrame 에서 공통으로 존재하는 값은 그대로 채워넣고, 해당하는 값이 없다면 NaN이 자동으로 들어간다.
# outer
pd.merge(df1, df2, how='outer', on='a')
실행결과
a b c
0 a 1.0 가
1 b 2.0 나
2 c 3.0 NaN
3 d NaN 다
merge() 괄호 안에 df1, df2 는 각각 Join 시킬 DataFrame을 뜻하고, 'how= ' 는 how 뒤에 조인 타입을 입력하면 된다. 마지막으로 'on=' 은 어떠한 컬럼을 key 값으로 사용할지를 설정해주는 파라미터이다. 우리의 예시에서는 a컬럼을 사용할 것이므로 a를 입력한다.
2. Inner Join : 교집합
pd.merge(df1, df2, how = 'inner', on= 'a')
실행결과
a b c
0 a 1 가
1 b 2 나
3. Left Join : 왼쪽 테이블에 있는 데이터 기준으로 오른쪽 데이터를 가져오는 방식
# left
pd.merge(df1, df2, how='left', on='a')
실행결과
a b c
0 a 1 가
1 b 2 나
2 c 3 NaN
4. Right Join : 오른쪽 테이블에 있는 데이터 기준으로 왼쪽 데이터를 가져오는 방식
# right
pd.merge(df1, df2, how='right', on='a')
실행결과
a b c
0 a 1.0 가
1 b 2.0 나
2 d NaN 다
우리가 살펴보았던 예시에서는 df1과 df2에 공통적으로 a 컬럼이 존재하였다. 따라서 key를 설정할 때 'on=' 만을 사용하여
Join을 실행할 수 있었다.
하지만 실제로 DataFrame 을 merge 할 시에는 컬럼에 존재하는 값은 동일하나, 컬럼명이 다를 경우가 있는데 이럴 때에는
left에 존재하는 DataFrame과 right에 존재하는 DataFrame 중, key값으로 사용할 컬럼명을 지정해주어야 한다.
df1 = pd.DataFrame({'a' : ['a', 'b', 'c'],'b':[1, 2, 3]})
df2 = pd.DataFrame({'c' : ['a', 'b', 'd'],'d':['가', '나', '다']})
print(df1)
print()
print(df2)
df1
a b
0 a 1
1 b 2
2 c 3
df2
c d
0 a 가
1 b 나
2 d 다
pd.merge(df1, df2, how = 'inner', left_on= 'a', right_on='c')
실행결과
a b c d
0 a 1 a 가
1 b 2 b 나
위의 예시에서 a 컬럼과 c의 컬럼은 컬럼명은 다르지만 각 행이 가지는 값이 같으므로, 둘 중 하나의 컬럼을 삭제하여 사용하면 된다!
'데이터분석' 카테고리의 다른 글
pandas.qcut, 구간 나누기, categorical 변수 (0) | 2023.08.21 |
---|---|
scikit learn, GridSearchCV (0) | 2023.08.18 |
data handling, map, np.where (0) | 2023.08.18 |
날짜 형식 데이터를 연, 월, 일로 변경하기 (0) | 2023.08.10 |
주피터 노트북 단축기 정리 (0) | 2022.11.18 |