DS_Study/서울시 CCTV 현황

[DS_study] pandas 데이터 합치기

scone 2022. 5. 29. 15:11

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 값에 대한 고민이 필요하다.