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()
을 활용하여 보다 효율적인 데이터 분석을 수행해 보시기 바랍니다!
'Python Pandas' 카테고리의 다른 글
Pandas Matplotlib을 이용한 데이터 시각화 (0) | 2025.02.22 |
---|---|
Pandas 내장 시각화 기능 (plot()) 활용하기 (0) | 2025.02.21 |
Pandas Pivot Table 활용 (pivot_table()) (0) | 2025.02.19 |
Pandas 그룹화(groupby()) 및 집계 함수(agg(), mean(), sum()) (0) | 2025.02.18 |
Pandas 다중 인덱스 사용 (set_index(), reset_index()) (0) | 2025.02.17 |