[Python]: merge 와 concat

김대현·2024년 7월 15일

concat & merge

데이터 분석을 시작하면 다양한 파일들을 다루게 된다. 특히 데이터 파일들이 여러 개로 나뉘어져 있을 때, 이 파일들을 합쳐야 원하는 정보를 얻을 수 있는 경우가 많다.

이런 상황에서 사용하는 것이 바로 concat**merge** 함수이다.
예를 들어, 도서관에서 받은 여러 파일을 합쳐 특정 회원의 도서 대출 기록을 확인해야 할 때 유용하다.


왜 데이터를 나눠서 저장하는 것인가?

데이터를 나눠서 저장하는 이유는 주로 보안과 효율성 때문이다.

예를 들어, 모든 데이터를 한 파일에 저장하면 데이터 손실의 위험이 커지고 관리가 복잡해진다.
반면, 데이터를 나눠서 저장하면 손실 위험이 줄어들고, 보안 또한 강화할 수 있다.
예를 들어, 도서관 회원 정보와 대출 기록을 분리하면 회원 정보는 보호하면서도 대출 기록은 쉽게 관리할 수 있다.'


concat & merge 들여다보기

데이터 준비하기
먼저, 필요한 패키지를 import 하고 데이터를 생성한다.

import pandas as pd

# 학생 데이터 생성
student_data = {
    "Code": [101, 102],
    "Name": ["Andrew", "Clara"]
}

# 보유 도서 데이터 생성
book_data = {
    "ID": [1, 2],
    "Title": ["Alice's Adventures in Wonderland", "A Little Princess"]
}

# 각각의 데이터 프레임 생성
student_df = pd.DataFrame(student_data)
book_df = pd.DataFrame(book_data)

# 5월 대출 기록 데이터 생성
check_out_data_may = {
    "Code": [101, 102],
    "ID": [1, 2],
    "Date": ["2020-05-02", "2020-05-03"]
}

# 6월 대출 기록 데이터 생성
check_out_data_june = {
    "Code": [101],
    "ID": [2],
    "Date": ["2020-06-02"]
}

# 각각의 데이터 프레임 생성
check_out_df_may = pd.DataFrame(check_out_data_may)
check_out_df_june = pd.DataFrame(check_out_data_june)

(1) Concat

concat은 데이터 프레임을 단순히 합칠 때 사용한다.

예를 들어, 5월과 6월의 도서 대출 기록을 합쳐보자.

check_out_df = pd.concat([check_out_df_may, check_out_df_june])
check_out_df = check_out_df.reset_index(drop=True)

   Code  ID        Date
0   101   1  2020-05-02
1   102   2  2020-05-03
2   101   2  2020-06-02

이제, 5월과 6월의 도서 대출 기록이 하나의 데이터 프레임에 합쳐졌다.

join 매개변수를 사용한 concat

join 매개변수를 사용하여 concat 시 공통 열을 기준으로 데이터 프레임을 합칠 수 있다. join 매개변수의 기본값은 outer이며, 이를 통해 공통 열이 모두 포함된 데이터 프레임을 얻을 수 있다. inner로 설정하면 공통된 부분만 남게 된다.

# 열 방향으로 데이터 프레임을 합침
concat_df = pd.concat([student_df.set_index('Code'), check_out_df.set_index('Code')], axis=1, join='inner')
print(concat_df)

       Name  ID        Date
Code                        
101  Andrew   1  2020-05-02
101  Andrew   2  2020-06-02
102   Clara   2  2020-05-03

그래서 join을 사용하면 merge와 비슷한 결과를 얻을 수 있지만, concat은 단순히 데이터 프레임을 이어붙이는 것에 중점을 둔다고 할 수 있다.


(2) Merge

merge는 공통된 항목을 기준으로 두 데이터 프레임을 합친다.

예를 들어, 학생 정보와 도서 대출 기록을 합쳐보자.

merge_inner = pd.merge(student_df, check_out_df, on="Code", how="inner")

   Code    Name  ID        Date
0   101  Andrew   1  2020-05-02
1   101  Andrew   2  2020-06-02
2   102   Clara   2  2020-05-03

이렇게 하면 도서 대출 기록이 있는 학생들의 정보가 출력된다.

그리고 merge를 하는 방법에는 총 네 가지 방법이 있다.


  • inner: 교집합
merge_inner = pd.merge(student_df, check_out_df, on="Code", how="inner")
  • left: 왼쪽 데이터 프레임을 기준으로 합침
merge_left = pd.merge(student_df, check_out_df, on="Code", how="left")
  • right: 오른쪽 데이터 프레임을 기준으로 합침
merge_right = pd.merge(student_df, check_out_df, on="Code", how="right")
  • outer: 합집합
merge_outer = pd.merge(student_df, check_out_df, on="Code", how="outer")

출처: https://velog.io/@gayeon/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%EC%B4%88%EB%B3%B4%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-concat-merge

profile
데이터 분석 스쿨 블로그 입니다.

0개의 댓글