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)
'머신러닝 딥러닝' 카테고리의 다른 글
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 |
댓글