pandas 에서 데이터 프레임을 병합하는 방법
- pd.concat()
- pd.merge()
- pd.join()
# 딕셔너리 안의 리스트 형태, 열 단위로 데이터가 만들어진다.
left = pd.DataFrame({
"key":["K0","K4","K2","K3"],
"A" : ["A0","A1","A2","A3"],
"B" : ["B0","B1","B2","B3"]
})
left
|
key |
A |
B |
0 |
K0 |
A0 |
B0 |
1 |
K4 |
A1 |
B1 |
2 |
K2 |
A2 |
B2 |
3 |
K3 |
A3 |
B3 |
#리스트 안의 딕셔너리 형태, 행 단위로 데이터가 만들어진다.
right = pd.DataFrame([
{"key":"K0","C":"C0","D":"D0"},
{"key":"K1","C":"C1","D":"D1"},
{"key":"K2","C":"C2","D":"D2"},
{"key":"K3","C":"C3","D":"D3"},
])
right
|
key |
C |
D |
0 |
K0 |
C0 |
D0 |
1 |
K1 |
C1 |
D1 |
2 |
K2 |
C2 |
D2 |
3 |
K3 |
C3 |
D3 |
pd.merge()
- 두 데이터 프레임에서 컬럼이나 인덱스를 기준으로 잡고 병합해주는 방법
- 기준이 되주는 컬럼이나 인덱스를 키값이라고 합니다.
- 기준이 되는 키 값은 데이터 프레임에 모두 포함되어 있어야 합니다.
# key를 기준으로 공통된 부분만 병합 됨
# how = 'inner' 가 디폴트 값
pd.merge(left,right,on="key")
|
key |
A |
B |
C |
D |
0 |
K0 |
A0 |
B0 |
C0 |
D0 |
1 |
K2 |
A2 |
B2 |
C2 |
D2 |
2 |
K3 |
A3 |
B3 |
C3 |
D3 |
# left에 있는 키 값을 기준으로 right 가 병합 됨 (없는 값은 NaN 표시)
pd.merge(left,right,how="left",on="key")
|
key |
A |
B |
C |
D |
0 |
K0 |
A0 |
B0 |
C0 |
D0 |
1 |
K4 |
A1 |
B1 |
NaN |
NaN |
2 |
K2 |
A2 |
B2 |
C2 |
D2 |
3 |
K3 |
A3 |
B3 |
C3 |
D3 |
pd.merge(left,right,how="right",on="key")
|
key |
A |
B |
C |
D |
0 |
K0 |
A0 |
B0 |
C0 |
D0 |
1 |
K1 |
NaN |
NaN |
C1 |
D1 |
2 |
K2 |
A2 |
B2 |
C2 |
D2 |
3 |
K3 |
A3 |
B3 |
C3 |
D3 |
# how = 'outer' 을 하면 합집합으로 병합된다.
pd.merge(left,right,how='outer',on='key')
|
key |
A |
B |
C |
D |
0 |
K0 |
A0 |
B0 |
C0 |
D0 |
1 |
K4 |
A1 |
B1 |
NaN |
NaN |
2 |
K2 |
A2 |
B2 |
C2 |
D2 |
3 |
K3 |
A3 |
B3 |
C3 |
D3 |
4 |
K1 |
NaN |
NaN |
C1 |
D1 |
이 경우, NaN 값에 대한 고민이 필요하다.