데이터 꿈나무
[사전 학습] 1-3 데이터 합치기 본문
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