판다스에서 데이터프레임은 테이블 형식의 데이터셋입니다. DBMS의 Table들 간에도 Join을 맺을 수 있듯이, 마찬가지로 판다스의 데이터프레임들 간에도 Join을 맺을 수 있습니다. 물론 Join을 맺을 공통 필드가 존재한다면 말입니다.
Join에는 모두 4가지 방식이 존재합니다. 즉, 두 데이터셋 간의 중복된 요소만을 Join하는 Inner Join과 두 데이터셋에 대한 모든 데이터를 Join하는 Outter Join, 그리고 왼쪽 데이터셋을 기준으로 하는 Left Join과 오른쪽 데이터셋을 기준으로 하는 Right Join입니다. 보다 명확한 Join의 파악은 아래의 코드 예제를 통해 파악할 수 있습니다.
먼저 Join 하고자 하는 데이터셋으로, 판다스의 데이터프레임을 아래 코드처럼 정의합니다.
import pandas as pd data_A = {'key': [1,2,3], 'name': ['Jane', 'John', 'Peter']} dataframe_A = pd.DataFrame(data_A, columns = ['key', 'name']) data_B = {'key': [2,3,4], 'age': [18, 15, 20]} dataframe_B = pd.DataFrame(data_B, columns = ['key', 'age']) print(dataframe_A) print(dataframe_B)
결과는 아래와 같습니다.
key name 0 1 Jane 1 2 John 2 3 Peter key age 0 2 18 1 3 15 2 4 20
두 데이터프레임 간에는 key라는 공통 필드가 존재하는 것을 볼 수 있습니다. 이를 토대로 먼저 Inner Join에 대한 코드입니다.
df_INNER_JOIN = pd.merge(dataframe_A, dataframe_B, left_on='key', right_on='key', how='inner') print(df_INNER_JOIN)
위의 코드의 결과는 다음과 같습니다.
key name age 0 2 John 18 1 3 Peter 15
다음은 Outer Join에 대한 코드입니다.
df_OUTER_JOIN = pd.merge(dataframe_A, dataframe_B, left_on='key', right_on='key', how='outer') print(df_OUTER_JOIN)
결과는 다음과 같습니다.
key name age 0 1 Jane NaN 1 2 John 18.0 2 3 Peter 15.0 3 4 NaN 20.0
다음은 Left Join에 대한 코드입니다.
df_LEFT_JOIN = pd.merge(dataframe_A, dataframe_B, left_on='key', right_on='key', how='left') print(df_LEFT_JOIN)
결과는 다음과 같습니다.
key name age 0 1 Jane NaN 1 2 John 18.0 2 3 Peter 15.0
다음은 Right Join에 대한 코드입니다.
df_RIGHT_JOIN = pd.merge(dataframe_A, dataframe_B, left_on='key', right_on='key', how='right') print(df_RIGHT_JOIN)
다음은 실행 결과입니다.
key name age 0 2 John 18 1 3 Peter 15 2 4 NaN 20
모든 Join은 pd.merge 함수를 통해 이루어지는데요. 위의 예제 코드를 보면 두 데이터프레임의 Join 필드가 모두 ‘key’라는 것을 알 수 있습니다. 이처럼 Join 필드의 이름이 동일할 경우 pd.merge의 left_on과 right_on 인자 대신 on 인자 하나로 대체가 가능합니다. 예를들어, Inner Join의 경우는 아래와 같습니다.
df_INNER_JOIN = pd.merge(dataframe_A, dataframe_B, on='key')
pd.merge 함수의 인자중 how도 생략되었는데, 이는 Inner Join이 pd.merge의 인자 how의 기본값이기 때문입니다.