Python/Python 기초문법

Python - Pandas 데이터 통합하기 (concat, join, merge)

GinaKim 2024. 1. 8. 11:53
728x90

concat() : 행 추가

* pandas 1.4.0 버전 이후로 append 지원 안함. concat() 사용 권장

import pandas as pd
import numpy as np

df1 = pd.DataFrame({
    'Class1' : [95, 92, 98, 100],
    'Class2' : [91, 93, 97, 99]
})

df2 = pd.DataFrame({
    'Class1' : [87, 89],
    'Class2' :[85, 90]
})

result = pd.concat([df1, df2])
result

 

위 데이터에서 인덱스 정렬하고 싶을 때, ignore_index=True 추가

df3 = pd.DataFrame({
    'Class1' : [96, 83]
})

pd.concat([result, df3], ignore_index=True)


join() : 열 추가

df4 = pd.DataFrame({
    'Class3' : [93, 91, 95, 98]
})

df1.join(df4)

 

인덱스 라벨 추가하고 싶을 때, 인덱스 라벨 지정 후 index= index_label 추가

index_label = ['a','b','c','d'] # 인덱스 라벨 추가

df1a = pd.DataFrame({'Class1': [95, 92, 98, 100],
                    'Class2': [91, 93, 97, 99]}, index= index_label)
df4a = pd.DataFrame({'Class3': [93, 91, 95, 98]}, index=index_label)

df1a.join(df4a)

 

join할 때, 인덱스가 같아야 한다는 점 참고! 

다르면 NaN값 나옴

index_label = ['a','b','c','d']
df1a = pd.DataFrame({'Class1': [95, 92, 98, 100],
                    'Class2': [91, 93, 97, 99]})
df4a = pd.DataFrame({'Class3': [93, 91, 95, 98]}, index=index_label)

df1a.join(df4a)


merge() : 특정 열 기준 통합시 사용

join 사용 시 컬럼 열 중복으로 오류가 남

df_A_B = pd.DataFrame({'판매월': ['1월', '2월', '3월', '4월'],
                       '제품A': [100, 150, 200, 130],
                       '제품B': [90, 110, 140, 170]})

df_C_D = pd.DataFrame({'판매월': ['1월', '2월', '3월', '4월'],
                       '제품C': [112, 141, 203, 134],
                       '제품D': [90, 110, 140, 170]})
                       
df_A_B.merge(df_C_D)

 

merge 통합 방법

df_left = pd.DataFrame({'key':['A','B','C'], 'left': [1, 2, 3]})
df_right = pd.DataFrame({'key':['A','B','D'], 'right': [4, 5, 6]})

 

left

df_left.merge(df_right, how='left', on= 'key')

 

right

df_left.merge(df_right, how='right', on= 'key')

 

outer

df_left.merge(df_right, how='outer', on= 'key') # FULL JOIN

 

inner

df_left.merge(df_right, how='inner', on= 'key') # 교집합

728x90