데이터 꿈나무

[사전 학습] 1-3 데이터 합치기 본문

Activity/KT AIVLE

[사전 학습] 1-3 데이터 합치기

ye_ju 2024. 8. 31. 12:42

DataFrame Merge

import pandas as pd

 

 

Inner join

data1 = {
    '학번' : [1, 2, 3, 4],
    '이름' : ['아이유', '김연아', '홍길동', '강감찬'],
    '학과' : ['철학', '경영학', '컴퓨터', '물리학']
}

data2 = {
    '학번' : [1, 2, 4, 5],
    '학년' : [2, 4, 3, 1],
    '학점' : [1.5, 2.0, 4.1, 3.8]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

display(df1)
display(df2)

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

 

 

Outer Join

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

 

Left and Right Join

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

 

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

 

 

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

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

# case 1 : 같은 의미 다른 컬럼명 --> 학번 vs 학생고유번호
data1 = {
    '학번' : [1, 2, 3, 4],
    '이름' : ['아이유', '김연아', '홍길동', '강감찬'],
    '학과' : ['철학', '경영학', '컴퓨터', '물리학']
}

data2 = {
    '학생고유번호' : [1, 2, 4, 5],
    '학년' : [2, 4, 3, 1],
    '학점' : [1.5, 2.0, 4.1, 3.8]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
merged_df = pd.merge(df1, df2, left_on='학번', right_on='학생고유번호', how='inner')
merged_df

merged_df.drop('학생고유번호', axis=1)

 

 

2) 공유하는 컬럼이 없는 경우

data1 = {
    '학번' : [1, 2, 3, 4],
    '이름' : ['아이유', '김연아', '홍길동', '강감찬'],
    '학과' : ['철학', '경영학', '컴퓨터', '물리학']
}

data2 = {
    '학년' : [2, 4, 3, 1],
    '학점' : [1.5, 2.0, 4.1, 3.8]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2, index=[1, 2, 4, 5])
display(df1)
display(df2)

merged_df1 = pd.merge(df1, df2, left_index=True, right_index=True, how='inner')
display(merged_df1)
merged_df2 = pd.merge(df1, df2, left_on='학번', right_index=True, how='inner')
display(merged_df2)
df1.join(df2, how='inner') # 양 쪽 데이터프레임의 인덱스를 기준으로 병합

 

 

데이터 연결 pandas.concat

import numpy as np
import pandas as pd

np.random.seed(1)
df1 = pd.DataFrame(np.random.randint(0, 9, (3, 2)), # 3x2 매트릭스
                  index=['a', 'b', 'c'],
                  columns=['one', 'two'])
df1

df2 = pd.DataFrame(np.random.randint(0, 9, (2, 2)), # 2x2 매트릭스
                  index=['a', 'b'],
                  columns=['three', 'four'])
df2

result_df = pd.concat([df1, df2], axis=1)
result_df

result_df2 = pd.concat([df1, df2], axis=0)
result_df2
merged_df = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
merged_df
data1 = {
    '학번' : [1, 2, 3, 4],
    '이름' : ['아이유', '김연아', '홍길동', '강감찬'],
    '학과' : ['철학', '경영학', '컴퓨터', '물리학']
}

data2 = {
    '학번' : [5, 6, 7, 8],
    '이름' : ['김범수', '이을용', '이순신', '김한국'],
    '학과' : ['경제학', '국문학', '경영학', '경영학']
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

display(df1)
display(df2)

 

concat_df = pd.concat([df1, df2], axis=0)
concat_df

concat_df.reset_index(drop=True, inplace=True)
concat_df

'Activity > KT AIVLE' 카테고리의 다른 글

[사전학습] 1-2 데이터 변경  (0) 2024.08.31
[사전 학습] 1-1 데이터 선택  (0) 2024.08.13
Comments