[Pandas] 판다스 데이터 병합 | merge | concat

·2024년 12월 18일

concat

데이터프레임 정의

df1 = pd.DataFrame({
   'A': ['A0', 'A1', 'A2', 'A3'],
   'B': ['B0', 'B1', 'B2', 'B3'],
   'C': ['C0', 'C1', 'C2', 'C3'],
   'D': ['D0', 'D1', 'D2', 'D3']
})

df2 = pd.DataFrame({
   'A': ['A4', 'A5', 'A6', 'A7'],
   'B': ['B4', 'B5', 'B6', 'B7'],
   'C': ['C4', 'C5', 'C6', 'C7'],
   'D': ['D4', 'D5', 'D6', 'D7']
})

df3 = pd.DataFrame({
   'A': ['A8', 'A9', 'A10', 'A11'],
   'B': ['B8', 'B9', 'B10', 'B11'],
   'C': ['C8', 'C9', 'C10', 'C11'],
   'D': ['D8', 'D9', 'D10', 'D11']
})

수직으로 합치기 (위아래)

pd.concat([df1, df2, df3])


인덱스가 유지된 채 합쳐짐.

pd.concat([df1, df2, df3]).reset_index(drop = True)


기존 인덱스를 없애고 새로 부여.

  • concat([df1, df2, df3], axis = 0): axis의 기본 값이 0으로 설정되어 있음.

수평으로 합치기 (옆으로)

pd.concat([df1, df2, df3], axis = 1).reset_index(drop = True)

  • 행 수가 다른 경우:
pd.concat([df1, df2, df3], axis = 0).reset_index(drop = True)

  • Null 값으로 채워진다.

merge

  • SQL의 JOIN과 유사.

데이터프레임 정의

df1 = pd.DataFrame({
    'key': ['A', 'B', 'C', 'D'],
    'value': [1, 2, 3, 4]
})

df2 = pd.DataFrame({
    'key': ['B', 'D', 'D', 'E'],
    'value': [5, 6, 7, 8]
})

merge 하기

  • key 컬럼을 기준으로 병합
pd.merge(df1, df2, on = 'key')

  • 디폴트는 이너조인
pd.merge(df1, df2, on = 'key', how = 'inner')

결과는 위와 같다.

  • OUTER JOIN
pd.merge(df1, df2, on = 'key', how = 'outer')


전체 데이터 출력.

  • LEFT JOIN
  • RIGHT JOIN

조인의 기준이 되는 키 컬럼의 명칭이 다른 경우

  • ex. df1의 '고객번호'와 df2의 'cno'를 기준으로 df1과 df2를 조인하려고 한다면
pd.merge(customers, orders, how = 'left', left_on = '고객번호', right_on = 'cno')
profile
To Dare is To Do

0개의 댓글