데이터 분석에서 데이터 병합은 필수적인 과정입니다. 이 글에서는 판다스의 merge 함수를 사용하여 데이터를 효율적으로 병합하는 방법을 단계별로 설명합니다. 병합의 기본부터 심화 기술까지, 실제 예제를 통해 쉽게 이해할 수 있도록 도와드립니다.

주요내용

  • 📊 데이터 병합의 기본 개념과 필요성 이해하기
  • 🔍 pandas.merge 함수의 주요 파라미터와 사용법 숙지하기
  • 🛠 실제 데이터셋을 사용한 병합 예제로 실습해보기

이 코드는 Python에서 경고 메시지를 무시하고, 현재 작업 경로를 파일 로드 경로로 설정하는 방법을 보여줍니다. 먼저, ospandas 모듈을 임포트합니다. 그 다음, warnings 모듈을 사용하여 불필요한 경고 메시지를 무시하도록 설정합니다. 마지막으로, %pwd 매직 커맨드를 사용하여 현재 작업 경로를 얻고, os.chdir() 함수를 사용하여 이 경로를 파일 로드 경로로 설정합니다.

1
2
3
4
5
6
7
8
9
import os
import pandas as pd

# 불필요한 경고 표시를 생략합니다.
import warnings
warnings.filterwarnings(action = 'ignore')

a=%pwd # 현재 작업 경로를 변수 a에 할당합니다.
os.chdir(a) # 현재 작업 경로를 파일 로드 경로로 설정합니다.
  • 데이터베이스를 효율적으로 관리하기 위해 데이터가 특정 key 변수를 기준으로 나누어 저장되는 경우가 흔하다.

  • SQL에서는 Join을 이용해 해결할 수 있고, python에서는 pandas의 merge함수를 통해 해결 가능하다.

관련 함수 : pandas.merge 함수



주요 파라미터

  • left : 통합 대상 데이터 프레임1

  • right : 통합 대상 데이터 프레임2

  • on : 통합기준 key 변수 또는 변수 리스트 (생략 시 이름이 동일한 변수를 key로 자동 인식)

  • left_on : 데이터 프레임 1의 key변수 또는 변수 리스트

  • right_on : 데이터 프레임 2의 key변수 또는 변수 리스트

  • left_index : 데이터 프레임 1의 index를 key변수로 사용할지 여부

  • right_index : 데이터 프레임 2의 index를 key변수로 사용할지 여부


  • 보통은 간단한 merge를 통해 해결 가능하지만, 종종 복잡한 케이스들이 발생할 수도 있다.

  • 이때 중요한 것은 merge를 할 때의 keypoint이다.

    1) 어떤 컬럼이 key value를 할 수 있는지 확인하고, 전처리를 통해 key value를 통일시킨다.

    2) 레코드 단위를 명확히 한다.

merge 기본: on의 활용


단계별로 생각해 봅시다.

이 코드는 pandas 라이브러리의 read_csv 함수를 사용하여 Telco_churn_customer_churn.csvTelco_churn_customer_info.csv 두 개의 CSV 파일을 각각 읽어와서 DataFrame 객체로 저장합니다. 첫 번째 파일은 Telco 회사의 고객 이탈 데이터를 포함하고 있으며, 두 번째 파일은 고객의 기본 정보를 담고 있습니다. 이를 통해 데이터 분석이나 처리 작업을 위한 초기 단계로 데이터를 로드하는 과정을 보여줍니다.

1
2
df1 = pd.read_csv("Telco_churn_customer_churn.csv") # Telco 고객 이탈 데이터를 불러옵니다.
df2 = pd.read_csv("Telco_churn_customer_info.csv") # Telco 고객 정보 데이터를 불러옵니다.

df1.head() 함수는 데이터프레임 df1에서 처음 다섯 행을 반환합니다. 이 함수는 데이터의 구조를 빠르게 파악하고자 할 때 유용하게 사용됩니다.

1
df1.head()  # 데이터프레임의 처음 다섯 행을 출력합니다.

df2.head() 함수는 데이터프레임 df2에서 처음 5개의 행을 반환합니다. 이 함수는 데이터를 빠르게 검토하고 구조를 이해하는 데 유용합니다.

1
df2.head()  # 데이터프레임의 처음 5개 행을 출력합니다.

두 데이터프레임 df1df2를 병합할 때, 공통된 열(키 변수)인 customerID를 기준으로 병합하는 방법을 보여줍니다. pd.merge 함수는 지정된 키(on 파라미터)를 사용하여 두 데이터프레임을 병합합니다. 이 방법은 데이터프레임 간의 관계를 명확하게 정의하고, 병합 과정에서 발생할 수 있는 오류를 최소화하기 위해 권장됩니다.

1
2
# 두 데이터프레임에서 이름이 같은 변수가 1개만 있어도(key 변수), 가급적 'on'을 사용하는 것이 좋습니다.
merged_df = pd.merge(df1, df2, on = 'customerID')

merged_df.head() 함수는 데이터프레임 merged_df에서 상위 5개 행을 출력합니다. 이 함수는 데이터프레임의 구조를 빠르게 확인하기 위해 사용됩니다.

1
merged_df.head() # 데이터프레임의 상위 5개 행을 출력합니다.

left_on과 right_on의 활용

단계별로 생각해 봅시다.

이 함수는 df2 데이터프레임에서 customerID 컬럼의 이름을 ID로 변경합니다. rename 메소드는 컬럼 이름을 변경할 때 사용되며, axis=1은 컬럼을 대상으로 한다는 것을 의미합니다. inplace=True는 변경사항을 원본 데이터프레임에 바로 적용한다는 것을 나타냅니다.

1
2
# df2의 customerID 컬럼명을 ID로 변경
 df2.rename({"customerID":"ID"}, axis = 1, inplace = True)

df1.head() 함수는 데이터프레임에서 처음 다섯 행을 반환합니다. 이 함수는 데이터의 구조를 빠르게 파악하고자 할 때 유용하게 사용됩니다.

1
df1.head()  # 데이터프레임의 처음 다섯 행을 출력합니다.

df2.head() 함수는 데이터프레임 df2에서 처음 5개의 행을 반환합니다. 이 함수는 데이터의 구조를 빠르게 파악하고자 할 때 유용하게 사용됩니다.

1
df2.head() # 데이터프레임의 처음 5개 행을 출력합니다.

두 데이터 프레임을 병합하는 과정에서 pd.merge 함수를 사용합니다. 이 함수는 left_onright_on 키워드를 통해 각각의 데이터 프레임에서 병합 기준이 되는 열을 지정합니다. 병합 시 leftright 데이터 프레임의 순서가 중요하며, 병합 기준 열을 리스트 형태로 지정할 수 있습니다. 이때, 지정된 순서가 병합 과정에 영향을 미칩니다.

1
2
3
4
# 데이터 프레임1은 customerID를 기준으로, 데이터 프레임2는 ID를 기준으로 병합
merged_df = pd.merge(df1, df2, left_on = ['customerID'], right_on = ['ID']) 

# left, right 순서가 중요하며, on, left_on, right_on 키워드에는 리스트 형태로 입력 가능합니다. 순서가 중요합니다.

merged_df.head() 함수는 병합된 데이터프레임의 상위 5개 행을 반환합니다. 이는 데이터 병합 과정에서 사용된 키 컬럼들이 결과 데이터프레임에도 포함되어 있음을 확인하는 데 유용합니다.

1
merged_df.head() # 키 컬럼 두 개가 모두 존재함

데이터프레임에서 중복되는 정보를 가진 컬럼을 제거하기 위해 drop 메서드를 사용합니다. 여기서 axis=1은 컬럼을 기준으로 삭제를 의미하며, inplace=True는 변경사항을 해당 데이터프레임에 바로 적용한다는 것을 의미합니다. 이 예제에서는 'ID' 컬럼이 중복 정보를 담고 있으므로 이를 데이터프레임에서 제거합니다.

1
2
# 컬럼명만 다르고 사실상 동일한 데이터이기 때문에 하나를 삭제하는 것이 좋다.
merged_df.drop('ID', axis = 1, inplace = True)

댓글남기기