Pandas DataFrame 결합과 병합

stav·2024년 6월 5일
0
post-thumbnail

✏️ 01-DataFrame 결합과 병합: 결합(concat)

개념 설명

concat 함수는 두 개 이상의 데이터프레임을 하나로 결합하는 데 사용된다. 축(axis) 방향에 따라 데이터프레임을 수평 또는 수직으로 결합할 수 있다.

기본 사용법

pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
  • objs: 결합할 데이터프레임이나 시리즈의 리스트
  • axis: 결합할 축 (0: 수직, 1: 수평, 기본값 0)
  • join: 결합 방식 ('inner' 또는 'outer', 기본값 'outer')
  • ignore_index: 인덱스를 무시하고 새로운 인덱스를 생성할지 여부 (기본값 False)
  • keys: 각 데이터프레임을 구분할 키 값
  • levels: 다중 인덱스 레벨
  • names: 다중 인덱스 이름
  • verify_integrity: 중복 인덱스 확인 여부 (기본값 False)
  • sort: 열 이름을 정렬할지 여부 (기본값 False)
  • copy: 원본 데이터의 복사 여부 (기본값 True)

예시

import pandas as pd
import numpy as np

# 두 개의 데이터프레임 생성
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3']
})

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

# 데이터프레임 수직 결합
result = pd.concat([df1, df2], axis=0)
print(result)

예시 결과

    A   B   C
0  A0  B0  C0
1  A1  B1  C1
2  A2  B2  C2
3  A3  B3  C3
0  A4  B4  C4
1  A5  B5  C5
2  A6  B6  C6
3  A7  B7  C7

중요 개념

  • concat: 여러 데이터프레임을 하나로 결합하는 함수이다.
  • axis 매개변수를 통해 데이터프레임을 수직 또는 수평으로 결합할 수 있다.
  • join 매개변수를 통해 결합 방식을 설정할 수 있다.

✏️ 02-DataFrame 결합과 병합: InnerJoin

개념 설명

merge 함수는 두 개 이상의 데이터프레임을 특정 열이나 인덱스를 기준으로 병합하는 데 사용된다. InnerJoin은 교집합을 기준으로 데이터프레임을 병합한다.

기본 사용법

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
  • left: 병합할 왼쪽 데이터프레임
  • right: 병합할 오른쪽 데이터프레임
  • how: 병합 방식 ('left', 'right', 'outer', 'inner', 기본값 'inner')
  • on: 병합 기준이 되는 열 이름
  • left_on: 왼쪽 데이터프레임의 병합 기준 열
  • right_on: 오른쪽 데이터프레임의 병합 기준 열
  • left_index: 왼쪽 데이터프레임의 인덱스를 병합 기준으로 사용할지 여부
  • right_index: 오른쪽 데이터프레임의 인덱스를 병합 기준으로 사용할지 여부
  • sort: 병합 결과를 정렬할지 여부
  • suffixes: 중복된 열 이름에 추가할 접미사
  • copy: 원본 데이터의 복사 여부
  • indicator: 병합 결과에 병합 방식을 나타내는 열 추가 여부
  • validate: 병합 방식 검증 (one_to_one, one_to_many, many_to_one, many_to_many)

예시

import pandas as pd

# 두 개의 데이터프레임 생성
df1 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K4'],
    'C': ['C0', 'C1', 'C2', 'C4'],
    'D': ['D0', 'D1', 'D2', 'D4']
})

# Inner Join을 사용한 데이터프레임 병합
result = pd.merge(df1, df2, how='inner', on='key')
print(result)

예시 결과

  key   A   B   C   D
0  K0  A0  B0  C0  D0
1  K1  A1  B1  C1  D1
2  K2  A2  B2  C2  D2

중요 개념

  • merge: 두 개 이상의 데이터프레임을 특정 열이나 인덱스를 기준으로 병합하는 함수이다.
  • InnerJoin: 교집합을 기준으로 데이터프레임을 병합하여 공통된 부분만 결합한다.
  • on 매개변수를 통해 병합 기준 열을 설정할 수 있다.

✏️ 03-DataFrame 결합과 병합: LeftJoin과 RightJoin

개념 설명

LeftJoinRightJoin은 각각 왼쪽 또는 오른쪽 데이터프레임을 기준으로 병합하여, 기준 데이터프레임의 모든 행을 포함하도록 병합하는 방식이다.

LeftJoin

pd.merge(left, right, how='left', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
  • left: 병합할 왼쪽 데이터프레임
  • right: 병합할 오른쪽 데이터프레임
  • how: 'left'로 설정하여 왼쪽 데이터프레임을 기준으로 병합

RightJoin

pd.merge(left, right, how='right', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
  • left: 병합할 왼쪽 데이터프레임
  • right: 병합할 오른쪽 데이터프레임
  • how: 'right'로 설정하여 오른쪽 데이터프레임을 기준으로 병합

예시

import pandas as pd

# 두 개의 데이터프레임 생성
df1 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K4'],
    'C': ['C0', 'C1', 'C2', 'C4'],
    'D': ['D0', 'D1', 'D2', 'D4']
})

# Left Join을 사용한 데이터프레임 병합
left_result = pd.merge(df1, df2, how='left', on='key')
print(left_result)

예시 결과

  key   A   B    C    D
0  K0  A0  B0   C0   D0
1  K1  A1  B1   C1   D1
2  K2  A2  B2   C2   D2
3  K3  A3  B3  NaN  NaN

예시

# Right Join을 사용한 데이터프레임 병합
right_result = pd.merge(df1, df2, how='right', on='key')
print(right_result)
``

`

### 예시 결과

```plaintext
  key    A    B   C   D
0  K0   A0   B0  C0  D0
1  K1   A1   B1  C1  D1
2  K2   A2   B2  C2  D2
3  K4  NaN  NaN  C4  D4

중요 개념

  • LeftJoin: 왼쪽 데이터프레임을 기준으로 병합하여 왼쪽 데이터프레임의 모든 행을 포함한다.
  • RightJoin: 오른쪽 데이터프레임을 기준으로 병합하여 오른쪽 데이터프레임의 모든 행을 포함한다.
  • how 매개변수를 'left' 또는 'right'로 설정하여 병합 방식을 선택할 수 있다.

✏️ 04-DataFrame 결합과 병합: OuterJoin

개념 설명

OuterJoin은 두 데이터프레임의 모든 행을 포함하여 병합하는 방식으로, 공통되지 않는 데이터도 포함하여 결합한다.

기본 사용법

pd.merge(left, right, how='outer', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
  • left: 병합할 왼쪽 데이터프레임
  • right: 병합할 오른쪽 데이터프레임
  • how: 'outer'로 설정하여 두 데이터프레임의 모든 행을 포함하여 병합

예시

import pandas as pd

# 두 개의 데이터프레임 생성
df1 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K4'],
    'C': ['C0', 'C1', 'C2', 'C4'],
    'D': ['D0', 'D1', 'D2', 'D4']
})

# Outer Join을 사용한 데이터프레임 병합
outer_result = pd.merge(df1, df2, how='outer', on='key')
print(outer_result)

예시 결과

  key    A    B    C    D
0  K0   A0   B0   C0   D0
1  K1   A1   B1   C1   D1
2  K2   A2   B2   C2   D2
3  K3   A3   B3  NaN  NaN
4  K4  NaN  NaN   C4   D4

중요 개념

  • OuterJoin: 두 데이터프레임의 모든 행을 포함하여 병합하며, 공통되지 않는 데이터도 포함하여 결합한다.
  • how 매개변수를 'outer'로 설정하여 모든 데이터를 포함한 병합을 수행한다.

정리

concat과 merge의 장단점

  • concat

    • 장점: 단순한 데이터 결합에 유용하며, 여러 데이터프레임을 쉽게 결합할 수 있다.
    • 단점: 복잡한 조인 조건을 지원하지 않으며, 동일한 열 이름을 가진 데이터프레임을 결합할 때 주의가 필요하다.
  • merge

    • 장점: 다양한 조인 조건을 지원하며, 복잡한 데이터 병합에 유용하다.
    • 단점: 사용법이 다소 복잡할 수 있으며, 조인 조건을 명확히 설정해야 한다.

각 join의 특징

  • InnerJoin

    • 교집합을 기준으로 데이터프레임을 병합하여 공통된 부분만 결합
  • LeftJoin

    • 왼쪽 데이터프레임을 기준으로 병합하여 왼쪽 데이터프레임의 모든 행을 포함
  • RightJoin
    • 오른쪽 데이터프레임을 기준으로 병합하여 오른쪽 데이터프레임의 모든 행을 포함
  • OuterJoin
    • 두 데이터프레임의 모든 행을 포함하여 병합하며, 공통되지 않는 데이터도 포함하여 결합
profile
Data Analyst Challenge

0개의 댓글

관련 채용 정보