목차
1. 개요
2. merge
2-1 merge 예제
3. concat
3-1 concat 예제
1. 개요
데이터프레임을 연결한다는 것은 여러 데이터프레임을 세로로 쌓거나, 가로로 나란히 배치하는 것을 의미한다.
데이터프레임을 연결하는 데 사용되는 Pandas 메서드는 아래와 같다.
- merge() : 기준 열을 기반으로 데이터를 합치는 메서드
- concat() : 특정 축(행 또는 열)을 따라 데이터를 연결하는 메서드
즉, 아래와 같이 이해할 수 있다.
- merge : 공통 열을 기준으로 데이터를 결합 (SQL JOIN 방식)
concat : 단순히 데이터를 이어 붙이는 방식
2. merge
merge는 두 DataFrame을 공통된 열(key)을 기준으로 연결하는 메서드이다.
데이터베이스에서의 join과 비슷하게 DataFrame 또는 Series객체를 병합한다.
Syntax
dataframe.merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
| 속성 | 의미 | |
| left(필수) | 병합할 첫 번째 pandas 객체 | |
| right(필수) | 병합할 두 번째 pandas 객체 | |
| how(선택) | 병합 방법을 지정한다. | lleft : 왼쪽 DataFrame의 키를 기준으로 병합 (SQL의 LEFT JOIN) |
| right :오른쪽 DataFrame의 키를 기준으로 병합 (SQL의 RIGHT JOIN) | ||
| outer :두 DataFrame의 키를 모두 사용 (합집합, FULL OUTER JOIN) | ||
| inner(기본값) :두 DataFrame에 모두 존재하는 키만 사용 (교집합, INNER JOIN) | ||
| :cross : 두 DataFrame의 모든 조합 생성 (카르테시안 곱) | ||
| on (선택) | 두 DataFrame에서 공통으로 존재하는 열 이름을 기준으로 병합할 때 사용한다. 예) on='id' | |
| left_on (선택) | 왼쪽 DataFrame에서 어떤 열을 기준으로 병합할지 지정한다. 왼쪽과 오른쪽의 열 이름이 다를 때 사용한다. |
|
| right_on (선택) | 오른쪽 DataFrame에서 어떤 열을 기준으로 병합할지 지정한다. 왼쪽과 오른쪽의 열 이름이 다를 때 사용한다. |
|
| left_index (선택) | 왼쪽 DataFrame의 인덱스를 병합 기준으로 사용할지 여부 | False(기본값) : 인덱스를 사용하지 않음 |
| True : 왼쪽 DataFrame의 인덱스를 기준으로 병합 | ||
| right_index (선택) | 오른쪽 DataFrame의 인덱스를 병합 기준으로 사용할지 여부 | False(기본값) : 인덱스를 사용하지 않음 |
| True : 오른쪽 DataFrame의 인덱스를 기준으로 병합 | ||
| sort (선택) | 병합 결과를 조인 키 기준으로 정렬할지 여부 | False(기본값) : : 기존 데이터 순서를 유지 |
| True : 조인 키 기준으로 정렬 | ||
| suffixes (선택) | 두 DataFrame에 같은 이름의 열이 있을 경우, 열 이름 뒤에 붙일 문자열을 지정한다. | 기본값 : '_x', '_y 예) name_x → 왼쪽 DataFrame의 name name_y → 오른쪽 DataFrame의 name |
| copy (선택) | 병합 결과를 새로운 DataFrame으로 복사할지 여부 | False : 가능하면 복사하지 않고 기존 데이터를 활용 |
| True(기본값) : 새로운 DataFrame을 생성 | ||
| indicator (선택) | 각 행이 어느 DataFrame에서 왔는지 표시하는 열을 추가한다. | False(기본값) : 표시하지 않음 |
| True : 각 행의 출처 정보를 담음 '_merge' 열 추가 | ||
| validate (선택) | 병합 형태가 올바른지 검사한다. | |
merge는 SQL의 JOIN과 같다.
| pandas | SQL |
| inner | INNER JOIN |
| left | LEFT JOIN |
| right | RIGHT JOIN |
| outer | FULL OUTER JOIN |
2-1 merge 예제
예제 1) 예제 데이터 생성
merge() 메서드를 사용하기 위해 pandas 라이브러리를 불러온다.
import pandas as pd
# 첫 번째 데이터프레임 (직원 정보)
df1 = pd.DataFrame({
'id': [1, 2, 3, 4],
'name': ['Kim', 'Lee', 'Park', 'Choi']
})
# 두 번째 데이터프레임 (부서 정보)
df2 = pd.DataFrame({
'id': [1, 2, 4, 5],
'dept': ['HR', 'IT', 'Finance', 'Sales']
})
print("df1")
print(df1)
print("\ndf2")
print(df2)
예제 1) 출력 결과
df1
id name
0 1 Kim
1 2 Lee
2 3 Park
3 4 Choi
df2
id dept
0 1 HR
1 2 IT
2 4 Finance
3 5 Sales
예제 2) inner merge
df1과 df2를 공통된 열인 'id'를 기준으로 inner merge 한다.
inner merge는 두 DataFrame에 모두 존재하는 키 값만 연결하는 방식이다.
result_inner = pd.merge(df1, df2, on='id', how='inner')
print(result_inner)
예제 2) 출력 결과
inner merge 결과, df1과 df2에 모두 존재하는 id 값만 결합된다.
id name dept
0 1 Kim HR
1 2 Lee IT
2 4 Choi Finance
예제 3) left merge
df1을 기준으로 df2를 left merge 한다.
left merge는 왼쪽 DataFrame(df1)의 모든 행을 유지면서 병합하는 방식이다.
일치하는 값이 있을 경우 오른쪽 DataFrame(df2)의 데이터를 연결한다.
일치하는 값이 없으면 해당 열은 NaN으로 표시된다.
result_left = pd.merge(df1, df2, on='id', how='left')
print(result_left)
예제 3) 출력 결과
left merge 결과, df1의 모든 행이 유지된다.
id=3의 경우, df2에 dept 속성이 없으므로 NaN으로 출력된다..
id name dept
0 1 Kim HR
1 2 Lee IT
2 3 Park NaN
3 4 Choi Finance
예제 4) right merge
df1과 df2를 right merge 한다.
right merge는 오른쪽 DataFrame(df2)의 모든 행을 유지하면서 병합하는 방식이다.
일치하는 값이 있을 경우 왼쪽 DataFrame(df1)의 데이터를 연결한다.
일치하는 값이 없으면 해당 열은 NaN으로 표시된다.
result_right = pd.merge(df1, df2, on='id', how='right')
print(result_right)
예제 4) 출력 결과
right merge 출력 결과, df2의 모든 행이 출력된다.
id=5의 경우 df1에 name 속성이 없으므로 NaN으로 출력된다.
id name dept
0 1 Kim HR
1 2 Lee IT
2 4 Choi Finance
3 5 NaN Sales
예제 5) outer merge
df1과 d2를 outer merge 한다.
outer merge는 두 Data Frame의 모든 키 값을 기준으로 병합하는 방식이다.
즉, 왼쪽 DataFrame과 오른쪽 DataFrame의 모든 행을 유지하면서 데이터를 결합한다.
일치하는 값이 있는 경우 데이터를 연결하고, 없는 경우 해당 열은 NaN으로 표시된다.
result_outer= pd.merge(df1, df2, on='id', how='outer')
print(result_outer)
예제 5) 출력 결과
outer merge 결과, df1과 df2에 존재하는 모든 id 값이 포함된다.
id=3의 경우 df2의 dept 값이 없고, id=5의 경우 df1의 name 값이 없어 NaN으로 출력된다.
id name dept
0 1 Kim HR
1 2 Lee IT
2 3 Park NaN
3 4 Choi Finance
4 5 NaN Sales
3. concat
concat은 두 개 이상의 DataFrame 또는 Series를 특정 축(행 또는 열)을 기준으로 이어 붙이는 함수이다.
Syntax
pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None,...)
| 속성 | 의미 | |
| objs | 연결할 pandas 객체(DataFrame 또는 Series)의 리스트 또는 튜플 | |
| axis | 연결할 축 | 0(기본값) : 행을 기준으로 연결한다. |
| 1 : 열을 기준으로 연결한다. | ||
| join | 열(또는 인덱스) 처리 방식 | outer(기본값) : :모든 열을 유지 (합집합) |
| inner :공통으로 존재하는 열만 유지 (교집합) | ||
| ignore_index | True로 설정하면 기존 인덱스를 무시하고 0부터 새로운 인덱스를 생성한다. | |
| keys | 각 DataFrame에 이름을 부여하여 계층적 인덱스(MultiIndex)를 생성한다. | |
3-1 concat 예제
예제 1) 예제 데이터 생성
concat() 메서드를 사용하기 위해 pandas 라이브러리를 불러온다.
import pandas as pd
# 첫 번째 데이터프레임
df1 = pd.DataFrame({
'name': ['Kim', 'Lee'],
'age': [25, 30]
})
# 두 번째 데이터프레임
df2 = pd.DataFrame({
'name': ['Park', 'Choi'],
'age': [28, 35]
})
print("df1")
print(df1)
print("\ndf2")
print(df2)
예제 1) 출력 결과
df1
name age
0 Kim 25
1 Lee 30
df2
name age
0 Park 28
1 Choi 35
예제 2) 행 기준 concat (axis=0)
두 DataFrame을 행 방향으로 연결한다.
axia=0은 행 기준으로 데이터를 아래로 이어 붙이는 방식이다.
result_row = pd.concat([df1, df2], axis=0)
print(result_row)
예제 2) 출력 결과
df1 아래에 df2가 그대로 이어 붙여진 것을 확인할 수 있다.
이때 기존 인덱스가 유지되기 때문에 인덱스 값이 중복될 수 있다.
name age
0 Kim 25
1 Lee 30
0 Park 28
1 Choi 35
예제 3) 열 기준 concat (axis=1)
두 DataFrame을 열 방향으로 연결한다.
axis=1은 열 기준으로 데이터를 옆으로 이어 붙이는 방식이다.
result_col = pd.concat([df1, df2], axis=1)
print(result_col)
예제 3) 출력 결과
두 DataFrame이 같은 인덱스를 기준으로 옆으로 결합된 것을 확인할 수 있다.
name age name age
0 Kim 25 Park 28
1 Lee 30 Choi 35
예제 4) ignore_index 사용
ignore_index=True를 사용하면 기존 인덱스를 무시하고 새로운 인덱스를 생성한다.
result_ignore = pd.concat([df1, df2], ignore_index=True)
print(result_ignore)
예제 4) 출력 결과
기존 인덱스가 제거되고 0부터 새로운 인덱스가 생성된 것을 확인할 수 있다.
name age
0 Kim 25
1 Lee 30
2 Park 28
3 Choi 35
예제 5) keys 사용
keys를 사용하면 각 DataFrame에 이름을 붙여 계층적 인덱스를 생성할 수 있다.
result_keys = pd.concat([df1, df2], keys=['df1', 'df2'])
print(result_keys)
예제 5) 출력 결과
각 DataFrame 앞에 df1, df2라는 상위 인덱스가 추가된 것을 확인할 수 있다.
name age
df1 0 Kim 25
1 Lee 30
df2 0 Park 28
1 Choi 35
'머신러닝&딥러닝' 카테고리의 다른 글
| 머신러닝 & 딥러닝 기초 11편 | 분산, 표준편차, 사분위수 (0) | 2026.03.14 |
|---|---|
| 머신러닝 & 딥러닝 기초 10편 | 평균, 중앙값, 최빈값 (statistics, pandas) (0) | 2026.03.14 |
| 머신러닝 & 딥러닝 기초 8편 | 데이터 변환 및 스케일링 (0) | 2026.03.13 |
| 머신러닝 & 딥러닝 기초 7편 | 데이터 정제(결측치, 이상치 처리 등) (1) | 2026.03.12 |
| 머신러닝 & 딥러닝 기초 6편 | 데이터 전처리 (0) | 2026.03.12 |