Pandas에서 두 개의 데이터프레임을 연결
데이터 분석을 하다 보면 두 개의 데이터프레임을 연결해야 할 때가 많습니다. Pandas는 이를 위해 여러 가지 방법을 제공합니다. 이 글에서는 concat
, merge
등 Pandas에서 제공하는 다양한 연결 방법들을 설명하고, 각 방법의 사용 예시를 통해 어떤 상황에서 어떤 방법을 사용하는 것이 적합한지 알아보겠습니다.
import pandas as pd
# 예제 데이터프레임 생성
df1 = pd.DataFrame({
'A' : ['A0' , 'A1' , 'A2' ],
'B' : ['B0' , 'B1' , 'B2' ]
})
df2 = pd.DataFrame({
'A' : ['A3' ],
'B' : ['B3' ],
'C' : ['C3' ]
})
display("Dataframe 1" )
display(df1)
display("Dataframe 2" )
display(df2)
예제로 사용하기 위한 데이터프레임을 생성합니다.
1. concat
: 단순 연결
concat
은 두 개 이상의 데이터프레임을 연결하는 가장 기본적인 방법입니다. 주로 행(row) 또는 열(column)을 기준으로 단순히 데이터를 이어붙일 때 사용됩니다.
1.1 행을 기준으로 연결하기
# 행 기준 연결
result = pd.concat([df1, df2], axis= 0 )
result
0
A0
B0
NaN
1
A1
B1
NaN
2
A2
B2
NaN
0
A3
B3
C3
axis=0
: 데이터프레임을 행 기준으로 연결합니다. 정보가 없는 위치는 NaN
값으로 추가가되며 기본값이므로 명시하지 않아도 됩니다.
1.2 열을 기준으로 연결하기
# 열 기준 연결
result = pd.concat([df1, df2], axis= 1 )
result
0
A0
B0
A3
B3
C3
1
A1
B1
NaN
NaN
NaN
2
A2
B2
NaN
NaN
NaN
axis=1
: 데이터프레임을 열 기준으로 연결합니다.
1.3 인덱스 재설정하기
연결 후 인덱스를 다시 설정하여 고유한 인덱스를 부여할 수 있습니다.
# 행 기준 연결 후 인덱스 재설정
result = pd.concat([df1, df2], axis= 0 )
result
0
A0
B0
NaN
1
A1
B1
NaN
2
A2
B2
NaN
0
A3
B3
C3
ignore_index=True
: 기존 인덱스를 무시하고 새로운 인덱스를 부여합니다. 위의 데이터 프레임은 기존의 데이터 프레임의 인덱스를 유지하고 있어 마지막 열의 인덱스가 0
으로 표시됩니다.
# 행 기준 연결 후 인덱스 재설정
result = pd.concat([df1, df2], axis= 0 , ignore_index= True )
result
0
A0
B0
NaN
1
A1
B1
NaN
2
A2
B2
NaN
3
A3
B3
C3
2. merge
: SQL 스타일의 병합
merge
는 SQL의 JOIN
연산과 유사하게, 공통된 열을 기준으로 두 데이터프레임을 병합합니다. 이는 두 데이터프레임 간의 복잡한 관계를 연결할 때 유용합니다.
병합을 수행하기 위해서 key
열을 공통으로 갖는 2개의 데이터프레임을 생성합니다.
# 예제 데이터프레임 생성
df1 = pd.DataFrame({
'key' : ['K0' , 'K1' , 'K2' ],
'A' : ['A0' , 'A1' , 'A2' ]
})
display("데이터프레임 1" )
display(df1)
df2 = pd.DataFrame({
'key' : ['K0' , 'K1' , 'K3' ],
'B' : ['B0' , 'B1' , 'B3' ]
})
display("데이터프레임 2" )
display(df2)
2.1 기본 병합 (inner join
)
inner join은 두 데이터프레임에서 공통된 키 값에 해당하는 행만을 반환합니다. 즉, 양쪽 데이터프레임에 모두 존재하는 키 값들에 대한 데이터만 포함됩니다.
# 기본 병합 (inner join)
result = pd.merge(df1, df2, on= 'key' )
result
on='key'
: 공통된 열을 기준으로 병합합니다.
기본적으로 inner join
을 수행하여 공통된 키 값만 포함합니다.
반환된 데이터프레임의 크기는 병합한 두 데이터프레임에서 공통된 키 값의 수에 따라 달라집니다.두 개의 데이터프레임이 공통으로 갖는 key
열에서 K0
, K1
을 갖는 행이 연결됩니다.
2.2 외부 병합 (outer join
)
# 외부 병합 (outer join)
result = pd.merge(df1, df2, on= 'key' , how= 'outer' )
result
0
K0
A0
B0
1
K1
A1
B1
2
K2
A2
NaN
3
K3
NaN
B3
how='outer'
: 모든 키 값을 포함하여 병합합니다. 일치하지 않는 값은 NaN
으로 표시됩니다.
outer join
은 두 데이터프레임의 모든 키 값을 포함하여 병합합니다. 공통된 키 값이 없으면, 해당하는 데이터는 NaN으로 채워집니다.
양쪽 데이터프레임의 모든 키 값을 포함하므로, 병합된 데이터프레임은 두 데이터프레임의 키 값의 합집합을 가지며 key
열의 K2
, K3
는 각각 B열과 A열이 없기 때문에 NaN
으로 설정됩니다.
2.3 왼쪽 병합 (left join
)
left join은 왼쪽(첫 번째) 데이터프레임의 모든 키 값을 포함하여 병합합니다.
# 왼쪽 병합 (left join)
result = pd.merge(df1, df2, on= 'key' , how= 'left' )
result
0
K0
A0
B0
1
K1
A1
B1
2
K2
A2
NaN
how='left'
: 왼쪽 데이터프레임의 모든 키 값을 유지하며 병합합니다.
왼쪽 데이터프레임의 키 값에 대응하는 오른쪽 데이터프레임의 데이터가 없으면, 해당 데이터는 NaN으로 채워집니다. 반환된 데이터프레임의 키 값은 왼쪽 데이터프레임의 키 값에 기반합니다.
2.4 오른쪽 병합 (right join
)
설명: right join은 오른쪽(두 번째) 데이터프레임의 모든 키 값을 포함하여 병합합니다.
# 오른쪽 병합 (right join)
result = pd.merge(df1, df2, on= 'key' , how= 'right' )
result
0
K0
A0
B0
1
K1
A1
B1
2
K3
NaN
B3
how='right'
: 오른쪽 데이터프레임의 모든 키 값을 유지하며 병합합니다.
오른쪽 데이터프레임의 키 값에 대응하는 왼쪽 데이터프레임의 데이터가 없으면, 해당 데이터는 NaN으로 채워집니다. 반환된 데이터프레임의 키 값은 오른쪽 데이터프레임의 키 값에 기반합니다.
4. 결론
Pandas에서 두 개의 데이터프레임을 연결하는 방법은 concat
, merge
, join
세 가지로 나뉩니다. 각 방법은 데이터프레임의 구조와 병합의 목적에 따라 적합한 방식이 달라집니다.
concat
: 단순히 행이나 열을 이어붙일 때 사용합니다.
merge
: 공통된 열을 기준으로 SQL 스타일의 복잡한 병합이 필요할 때 사용합니다.
join
: 인덱스를 기준으로 데이터프레임을 병합할 때 사용합니다.
이러한 방법들을 적절히 사용하여 데이터프레임을 효과적으로 연결하고, 데이터 분석 작업을 더 쉽고 효율적으로 수행할 수 있습니다. 필요에 따라 다양한 옵션을 활용하여 원하는 결과를 얻어보세요!
Date
Title
Author
Jan 1, 3000
전체 카테고리
gabriel yang
Oct 3, 2024
Pandas에서 Column 추가 및 삭제하는 방법
gabriel yang
Oct 3, 2024
Pandas 데이터프레임 mongodb에 저장하기
gabriel yang
Sep 21, 2024
Pandas에서 결측치(NaN) 처리하기
gabriel yang
Sep 11, 2024
Pandas SQL 쿼리 이용하기
gabriel yang
Aug 29, 2024
Pandas에서 데이터 형식 변경하기
gabriel yang
Aug 29, 2024
Pandas에서 데이터를 정렬하는 방법
gabriel yang
Aug 29, 2024
Pandas에서 인덱싱 및 슬라이싱하는 방법
gabriel yang
Aug 27, 2024
Pandas SQL 데이터베이스 읽어오기
gabriel yang
Aug 26, 2024
Pandas groupby 사용방법
gabriel yang
Aug 24, 2024
Pandas에서 melt를 사용해야 하는 데이터 유형과 사용 방법
gabriel yang
Aug 24, 2024
Pandas에서 pivot_table
사용하기
gabriel yang
Aug 24, 2024
Pandas에서 reset_index를 사용해야 하는 이유
gabriel yang
Aug 22, 2024
Pandas Excel과 CSV 파일을 읽어오는 방법
gabriel yang
Aug 19, 2024
Pandas DataFrame의 컬럼 이름 변경하기
gabriel yang
Aug 17, 2024
Pandas SettingWithCopyWarning 문제 해결
gabriel yang
Nov 30, 2023
Dataframe을 Dict로 생성 및 변환
gabriel yang
Nov 29, 2023
python datetime 사용법 정리
gabriel yang
Sep 14, 2023
Pandas 중복 데이터 제거하기
gabriel yang
No matching items