데이터 병합&연결

hisungmi·2024년 8월 14일
0

KT Aivle

목록 보기
6/23
post-thumbnail

데이터 병합

  • 각기 다른 두개 이상의 DataFrame을 하나로 병합하여 결과 집합을 만들어냄

    inner, outer, left, right
    데이터 구조와 문제에 맞게 적용

DataFrame 병합 구현 방법

Pandas의 merge 함수DataFrame의 join 메소드
df1.merge(df2, on='c', how='inner')df1.join(df2, on='c', how='inner')

Pandas의 Index

  • Pandas의 Series나 DataFrame은 각 행마다 Index가 있고, Index를 기준으로 병합이 이루어 지기도함

데이터 연결

  • 하나의 DataFrame에 다른 DataFrame또는 Series를 연결하여 결과집합을 만듬

    연결은 공유하는 Key 값을 사용하지 않고, 데이터를 기존 DataFrame 아래,우측에 붙여 연결

Pandas의 연결 구현 방법

pd.concat(df1, df2, axis, ... )

# axis = 0 : 행방향(위아래) axis = 1 : 열방향(좌우)

데이터 병합/연결 활용 예시

병합 예시

# 판다스 로딩
import pandas as pd

# 데이터 생성
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

- INNER JOIN

DataFrame간 조인 조건을 만족하는 행을 합치는 것

# inner_join - 일치되는 것만 merge
inner_df = pd.merge(df1, df2, on='학번', how='inner')
display(inner_df)

- OUTER JOIN

조건에 부합하지 않는 행까지 포함시켜 결합하는 방법

outer_df = pd.merge(df1, df2, on='학번', how='outer')

- LEFT and RIGHT JOIN

첫번째를 기준 and 두번째를 기준 하여 DataFrame을 결합하는 방법

left_df = pd.merge(df1, df2, on='학번', how='left')
right_df = pd.merge(df1, df2, on='학번', how='right')

merge 응용 : 현실 데이터를 다룰 때 생길만 한 경우

1) 같은 의미의 다른 컬럼명을 병합할 때

case 1 : 같은 의미 다른 컬럼명 -> 학번 vs 학생고유번호

# 데이터 생성
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

merged_df = pd.merge(df1, df1, left_on='학번', right_on='학번고유번호', how='inner')
display(merged_df)

#두개의 공통 키 중 하나 삭제
merged_df.drop('학생고유번호', axis=1)

2) 공유하는 컬럼이 없을 때

#데이터 생성

#양 데이터 인덱스로 병합 진행
merged_df1 = pd.merge(df1, df2, left_index=True, how='inner')
display(merged_df1)
#왼쪽은 학번, 오른쪽은 인덱스 기준
merged_df2 = pd.merge(df1, df2, left_on='학번', right_index=True, how='inner')

#join 사용 : 양쪽 데이터프레임의 인덱스 기준으로 병합
df1.join(df2, how='inner')

연결 예시

import numpy as np
import pandas as pd

np.random.seed(1) #예제를 위한 고정된 난수 설정

# 데이터 생성
df1 = pd.DataFrame(data1) #3x2 정수로 구성된 매트릭스 생성
display(df1)
df2 = pd.DataFrame(data2) #2x2 정수로 구성된 매트릭스 생성
display(df2)

concat

result_df = pd.concat([df1, df2], axis=1)  # 0은 행, 1은 열

#outer join 과 concat 같은 결과
merge_df = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
profile
난 성미다.

0개의 댓글