Python Pandas

Pandas 데이터 프레임 결합 - merge()와 concat()

PyExplorer 2025. 2. 20. 09:32
728x90

Pandas 데이터 프레임 결합: merge()concat()

데이터 분석을 진행하다 보면 여러 개의 데이터 프레임을 하나로 합쳐야 하는 경우가 자주 발생합니다. Pandas에서는 merge()concat() 함수를 사용하여 데이터 프레임을 결합할 수 있습니다. 두 함수는 사용 목적이 다르므로 각각의 특징과 차이점을 이해하는 것이 중요합니다.

이 글에서는 merge()concat()을 사용하는 방법을 실용적인 예제와 함께 설명하겠습니다.


1. merge()를 이용한 데이터 프레임 병합

1.1 merge()란?

merge() 함수는 SQL의 JOIN과 유사하게 두 개의 데이터 프레임을 특정 열 또는 인덱스를 기준으로 병합할 때 사용됩니다.

1.2 merge() 기본 사용법

import pandas as pd

# 샘플 데이터 생성
df1 = pd.DataFrame({
    'id': [1, 2, 3, 4],
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [25, 30, 35, 40]
})

df2 = pd.DataFrame({
    'id': [3, 4, 5, 6],
    'city': ['New York', 'Los Angeles', 'Chicago', 'Houston'],
    'salary': [70000, 80000, 90000, 100000]
})

# id를 기준으로 병합
merged_df = pd.merge(df1, df2, on='id')
print(merged_df)

출력 결과:

   id     name  age       city  salary
0   3  Charlie   35   New York   70000
1   4    David   40  Los Angeles   80000

위 예제에서 두 데이터 프레임은 id 열을 기준으로 병합되었습니다. 기본적으로 merge()는 내부 조인(inner join)을 수행하므로, id 값이 일치하는 행만 유지됩니다.

1.3 merge()의 다양한 옵션

(1) 조인 방식 지정

조인 방식 설명
inner 교집합 (기본값)
outer 합집합 (모든 데이터 포함)
left 왼쪽 데이터 프레임 기준
right 오른쪽 데이터 프레임 기준

예제:

# outer join
merged_outer = pd.merge(df1, df2, on='id', how='outer')
print(merged_outer)

(2) 여러 개의 열을 기준으로 병합

# 여러 개의 열을 기준으로 병합
df3 = pd.DataFrame({
    'id': [1, 2, 3, 4],
    'dept': ['HR', 'IT', 'IT', 'Finance'],
    'age': [25, 30, 35, 40]
})

merged_multi = pd.merge(df1, df3, on=['id', 'age'])
print(merged_multi)

2. concat()을 이용한 데이터 프레임 연결

2.1 concat()이란?

concat() 함수는 여러 개의 데이터 프레임을 행 또는 열 방향으로 연결할 때 사용됩니다. SQL의 UNION과 유사한 기능을 수행합니다.

2.2 concat() 기본 사용법

# 샘플 데이터 생성
df4 = pd.DataFrame({
    'id': [5, 6, 7],
    'name': ['Emma', 'Frank', 'Grace'],
    'age': [22, 28, 33]
})

# 수직(행 방향) 결합
concat_df = pd.concat([df1, df4])
print(concat_df)

출력 결과:

   id     name  age
0   1    Alice   25
1   2      Bob   30
2   3  Charlie   35
3   4    David   40
0   5     Emma   22
1   6    Frank   28
2   7    Grace   33

위 결과에서 볼 수 있듯이, 데이터 프레임을 단순히 이어붙이면 인덱스가 그대로 유지됩니다. 만약 인덱스를 재설정하려면 ignore_index=True 옵션을 사용하면 됩니다.

concat_df_reset = pd.concat([df1, df4], ignore_index=True)
print(concat_df_reset)

2.3 concat()의 다양한 옵션

(1) 열 방향 연결

기본적으로 axis=0이므로 행 방향으로 연결되지만, axis=1로 설정하면 열 방향으로 연결할 수 있습니다.

# 열 방향 결합
concat_columns = pd.concat([df1, df2], axis=1)
print(concat_columns)

(2) 공통 열이 없는 데이터 프레임 연결

공통 열이 없는 경우 concat()을 사용할 때 join='outer'(기본값) 또는 join='inner'를 지정하여 결합 방식을 조정할 수 있습니다.

concat_outer = pd.concat([df1, df2], join='outer', axis=1)
print(concat_outer)

만약 공통 열이 없는 데이터 프레임을 axis=0으로 결합하면, NaN 값이 포함된 형태로 결합됩니다.

concat_outer_rows = pd.concat([df1, df2], axis=0, ignore_index=True)
print(concat_outer_rows)

3. merge() vs. concat() 비교

함수 사용 목적 주요 옵션
merge() 특정 열을 기준으로 데이터 병합 how(inner, outer, left, right)
concat() 데이터 프레임 연결 axis(0=행, 1=열), ignore_index

merge()는 공통 키 값을 기준으로 데이터를 병합할 때 사용하고, concat()은 단순히 데이터를 이어붙일 때 사용합니다.


4. 정리

  • merge()는 SQL의 JOIN과 유사하며, 특정 열을 기준으로 데이터를 병합할 때 유용합니다.
  • concat()은 여러 개의 데이터 프레임을 단순 연결할 때 사용됩니다.
  • 사용 목적에 따라 적절한 방식을 선택하는 것이 중요합니다.

이제 merge()concat()을 활용하여 보다 효율적인 데이터 분석을 수행해 보시기 바랍니다!

728x90