본문 바로가기
머신러닝 딥러닝

0823 Pandas6 DataFeame의 merge

by 대금부는개발자 2021. 8. 23.
SMALL

0823 DataFeame의 merge(병합)

Database의 table의 join과 같은 개념 

 

 

import numpy as np
import pandas as pd

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)

 

 

 

#merge(inner join)  #공통적으로 존재하는 것만 합침
df3 = pd.merge(df1,df2,on='학번', how='inner') #on을 사용하면 무엇을 기준으로 합칠지에 대한 칼럼을 알려주는 기능. 
display(df3)

 

 

 

import numpy as np
import pandas as pd

 


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

data2= {'학번':[1,2,4,1], #학번을 수정했어요! (학번 1 중복)
       '학년':[2,4,3,1],
       '학점':[1.5, 2.0, 4.1, 3.8]}

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

display(df1)
display(df2)

#merge(inner join) 
df3 = pd.merge(df1,df2,on='학번', how='inner')
display(df3)

 

# 1 대 1 연결이 아니고 있는 것을 다 연결해요. column을 기준으로 같은 것을 찾아 다 연결!

 

import numpy as np
import pandas as pd

 


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)

#merge(full outer join) 
df3 = pd.merge(df1,df2,on='학번', how='outer')  #outer join은 연결점이 없어도 다 합쳐요.
display(df3)

 

 

import numpy as np
import pandas as pd

 


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)

#merge(left outer join) 
df3 = pd.merge(df1,df2,on='학번', how='left')   #left join은 왼쪽에 있는 것만 포함시켜요.
display(df3)

 

 

df3 = pd.merge(df1,df2,on='학번', how='right')   #right join은 오른쪽에 있는 것만 포함시켜요.
display(df3)

 

 

#column명이 다를때 merge

 


import numpy as np
import pandas as pd

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

data2= {'학생학번':[1,2,4,5],   #학생학번으로 변경(column의 이름이 달라졌어요!)
       '학년':[2,4,3,1],
       '학점':[1.5, 2.0, 4.1, 3.8]}

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

display(df1)
display(df2)

#merge(inner join)  #연결점이 있는 것만
#on : 두개의 DataFrame에 공통 이름을 가지는 column이 존재할 때 사용해요
df3 = pd.merge(df1,df2,left_on='학번',right_on='학생학번', how='inner')
display(df3)

 

#만약 DataFrame을 merge시킬 기준이 되는 column의 이름이 다른 경우 left_on, right_on을 사용해요!

 


import numpy as np
import pandas as pd

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

data2= {
       '학년':[2,4,3,1], #학번이 없어졌어요! 현재 공통 column이 없어요
       '학점':[1.5, 2.0, 4.1, 3.8]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2,
                  index=[1,2,4,5]) #지정 index를 학번으로 사용해요

display(df1)
display(df2)
#하나의 DataFrame의 cloumn과 다른 DataFrame의 index를 기준으로 merge를 하려면 어떻게 해야하나요?

df3 = pd.merge(df1,df2,left_on='학번',right_index=True, how='inner') #right_index=True 
display(df3)

# index기준으로 merge 할 수 있어요!

 

 


import numpy as np
import pandas as pd


data1 = {
        '이름':['아이유','김연아','홍길동','강감찬'],  #학번이 없어졌어요! 
        '학과':['철학','경영','컴퓨터','물리']}

data2= {
       '학년':[2,4,3,1], #학번이 없어졌어요! 
       '학점':[1.5, 2.0, 4.1, 3.8]}

df1 = pd.DataFrame(data1,
                  index=[1,2,3,4])  #index사용
df2 = pd.DataFrame(data2,
                  index=[1,2,4,5]) ##index사용

display(df1)
display(df2)

df3 = pd.merge(df1,df2,left_index=True,right_index=True, how='inner') #right_index=True 
display(df3)

 

 

 

이번에는 merge말고 Series연결(concat)에 대해서 알아보아요!

 

 

import numpy as np
import pandas as pd

s1 = pd.Series([0,1], index=['a','c'])
s2 = pd.Series([4,3,2],index=['b','c','e'])
s3 = pd.Series([5,6],index=['f','g'])

print(s1)
print(s2)
print(s3)

s4= pd.concat([s1,s2,s3], axis=0) #어떻게 연결하느냐에 따라 Sereise가 될수도 있고 DataFrame이 될 수도 있어요
print(s4)

 

a    0
c    1
dtype: int64
b    4
c    3
e    2
dtype: int64
f    5
g    6
dtype: int64
a    0
c    1
b    4
c    3
e    2
f    5
g    6
dtype: int64

 

 

import numpy as np
import pandas as pd

s1 = pd.Series([0,1], index=['a','c'])
s2 = pd.Series([4,3,2],index=['b','c','e'])
s3 = pd.Series([5,6],index=['f','g'])

print(s1)
print(s2)
print(s3)

s4= pd.concat([s1,s2,s3], axis=1) #어떻게 연결하느냐에 따라 Sereise가 될수도 있고 DataFrame이 될 수도 있어요
display(s4)

 

 

#첫 번째 Series가 첫 번째 coiumn, 두 번째 Series가 두 번째 coiumn, c 칼럼이 같은 경우 index가 같기 때문에 똑같은 것은 합쳐져요.  (중복)

 

 

Dataframe을 연결해보아요!

 

import numpy as np
import pandas as pd

np.random.seed(1)

df1 = pd.DataFrame(np.random.randint(0,9,(3,2)),
                  index=['a','b','c'],
                  columns=['one','two'])


df2 = pd.DataFrame(np.random.randint(0,9,(2,2)),
                  index=['a','b'],
                  columns=['three','four'])

display(df1)
display(df2)

result = pd.concat([df1,df2],
                  axis=1) #열방향

display(result)

 

 

LIST

'머신러닝 딥러닝' 카테고리의 다른 글

0823 Pandas7 DataFeame Grouping  (0) 2021.08.23
0823 Pandas7 DataFeame의 결치처리  (0) 2021.08.23
0820 Pandas5 DataFrame function  (0) 2021.08.20
0820 Pandas4 DataFrame function  (0) 2021.08.20
0819 Pandas 3 DataFrame row  (0) 2021.08.19

댓글