[python] 데이터 결합(Join) 방법

데이터 처리 작업에서 다양한 데이터를 결합하여 분석이나 시각화를 수행해야 할 때가 있습니다. 파이썬에서는 데이터 결합을 위해 여러 방법을 제공하고 있습니다. 이번 블로그 포스트에서는 주로 사용되는 데이터 결합 방법에 대해 알아보겠습니다.

1. Inner Join

Inner Join은 두 개의 데이터 집합에서 공통된 값을 기준으로 데이터를 결합하는 방법입니다. 즉, 양쪽 데이터에 동일한 값을 가진 행만을 남기고 나머지는 제거합니다. 예를 들어, 학생 데이터와 성적 데이터를 학번을 기준으로 Inner Join 한다면, 학번이 동일한 학생의 학번, 이름, 성적 정보만으로 새로운 데이터 집합을 만들 수 있습니다.

import pandas as pd

# 학생 데이터
student_data = {'학번': [1, 2, 3, 4],
                '이름': ['김철수', '이영희', '박민수', '홍길동']}
student_df = pd.DataFrame(student_data)

# 성적 데이터
score_data = {'학번': [2, 3, 4, 5],
              '성적': [80, 75, 90, 85]}
score_df = pd.DataFrame(score_data)

# Inner Join
result_df = pd.merge(student_df, score_df, on='학번', how='inner')
print(result_df)

2. Left Join

Left Join은 왼쪽 데이터 집합을 기준으로 오른쪽 데이터 집합을 결합하는 방법입니다. 왼쪽 데이터에는 모든 행이 포함되고, 오른쪽 데이터에는 왼쪽 데이터와 공통된 값이 있는 행만을 포함합니다. 만약 오른쪽 데이터에 왼쪽 데이터와 매칭되는 값이 없다면, 결합된 결과에는 NULL 값이 포함됩니다.

import pandas as pd

# 국가별 인구 데이터
population_data = {'국가': ['한국', '미국', '일본'],
                   '인구': [50000000, 330000000, 126000000]}
population_df = pd.DataFrame(population_data)

# 국가별 GDP 데이터
gdp_data = {'국가': ['한국', '중국', '일본'],
            'GDP': [1700000000000, 15000000000000, 5600000000000]}
gdp_df = pd.DataFrame(gdp_data)

# Left Join
result_df = pd.merge(population_df, gdp_df, on='국가', how='left')
print(result_df)

3. Right Join

Right Join은 왼쪽 데이터 집합을 오른쪽 데이터 집합을 기준으로 결합하는 방법입니다. 왼쪽 데이터와 공통된 값을 가진 오른쪽 데이터만을 포함하고, 오른쪽 데이터에는 모든 행이 포함됩니다. 왼쪽 데이터에 매칭되는 값이 없다면, 결합된 결과에는 NULL 값이 포함됩니다.

import pandas as pd

# 제품별 판매량 데이터
sales_data = {'제품': ['A', 'B', 'C'],
              '판매량': [100, 200, 300]}
sales_df = pd.DataFrame(sales_data)

# 제품별 가격 데이터
price_data = {'제품': ['A', 'B', 'D'],
              '가격': [1000, 2000, 3000]}
price_df = pd.DataFrame(price_data)

# Right Join
result_df = pd.merge(sales_df, price_df, on='제품', how='right')
print(result_df)

4. Full Outer Join

Full Outer Join은 두 개의 데이터 집합에 대해 왼쪽 데이터와 오른쪽 데이터를 모두 포함하여 결합하는 방법입니다. 만약 어느 한쪽 데이터에만 존재하는 행이 있다면, 결합된 결과에는 NULL 값이 포함됩니다.

import pandas as pd

# 고객별 구매 데이터
customer_data = {'고객ID': [1, 2, 3, 4],
                 '고객명': ['홍길동', '김철수', '이영희', '박민수']}
customer_df = pd.DataFrame(customer_data)

# 고객별 포인트 데이터
point_data = {'고객ID': [2, 3, 5, 6],
              '포인트': [1000, 500, 2000, 1500]}
point_df = pd.DataFrame(point_data)

# Full Outer Join
result_df = pd.merge(customer_df, point_df, on='고객ID', how='outer')
print(result_df)

Python에서 데이터를 결합하는 방법은 여러 가지가 있지만, Inner Join, Left Join, Right Join, Full Outer Join은 가장 흔히 사용되는 방법입니다. 각각의 방법을 적재적소에 맞게 사용하여 데이터를 효과적으로 결합할 수 있습니다.

더 자세한 내용은 다음 참조를 확인하세요.