merge()函數(shù)介紹
說(shuō)明
pandas.merge(left, right, how: str = 'inner', on=None, left_on=None, right_on=None, left_index: bool = False, right_index: bool = False, sort: bool = False, suffixes='_x', '_y', copy: bool = True, indicator: bool = False, validate=None)
功能:用于合并兩個(gè) DataFrame 對(duì)象或 Series對(duì)象。只能用于兩個(gè)表的拼接(左右拼接,不能用于上下拼接) 。
應(yīng)用場(chǎng)景:數(shù)據(jù)合并 ( 數(shù)據(jù)合并的另一個(gè)常用函數(shù)是pd.concat())
參數(shù)說(shuō)明:
left,right
用于拼接的兩個(gè)表中,即使沒(méi)有確定誰(shuí)是主鍵,函數(shù)也會(huì)自動(dòng)將兩個(gè)表中的重復(fù)列作為主鍵,直接把一個(gè)表的名字傳遞給參數(shù)left,另一個(gè)表的名字傳遞給參數(shù)right
how
參數(shù)拼接方式,默認(rèn)內(nèi)連接(‘inner’)
內(nèi)連接inner:將兩個(gè)表主鍵一致的信息拼接到一起
外連接outer:保留兩個(gè)表的所有信息,如果遇到對(duì)不齊的部分,用NAN填充
左連接left:保留左表的全部信息,把右表滿足主鍵的行信息并進(jìn)來(lái),對(duì)不齊的部分用NAN填充
右連接right:保留右表的全部信息(同上)
示例:
import pandas as pd
data1 =pd.DataFrame({'a':['a1','a2','a3'],
'b':['b1','b2','b3'],
'key':['a','b','c'],
'key1':['d','e','f']})
data2 = pd.DataFrame({'c':['c1','c2','c3'],
'd':['d1','d2','d3'],
'key':['a','b','a'],
'key1':['d','e','e']})
result=pd.merge(data1,data2,on = ['key','key1'])
result1=pd.merge(data1,data2,how ="left",on = ['key','key1'])
result2=pd.merge(data1,data2,how ="right",on = ['key','key1'])
result3=pd.merge(data1,data2,how ="inner",on = ['key','key1'])
result4=pd.merge(data1,data2,how ="outer",on = ['key','key1'])
print(data1)
print(data2)
print(result)
print(result1)
print(result2)
print(result3)
print(result4)
運(yùn)行結(jié)果:
a b key key1
0 a1 b1 a d
1 a2 b2 b e
2 a3 b3 c f
c d key key1
0 c1 d1 a d
1 c2 d2 b e
2 c3 d3 a e
a b key key1 c d
0 a1 b1 a d c1 d1
1 a2 b2 b e c2 d2
a b key key1 c d
0 a1 b1 a d c1 d1
1 a2 b2 b e c2 d2
2 a3 b3 c f NaN NaN
a b key key1 c d
0 a1 b1 a d c1 d1
1 a2 b2 b e c2 d2
2 NaN NaN a e c3 d3
a b key key1 c d
0 a1 b1 a d c1 d1
1 a2 b2 b e c2 d2
a b key key1 c d
0 a1 b1 a d c1 d1
1 a2 b2 b e c2 d2
2 a3 b3 c f NaN NaN
3 NaN NaN a e c3 d3
Process finished with exit code 0
on
1、確定哪個(gè)字段作為主鍵
2、如果兩個(gè)表中有兩列以上信息相同,可以指定哪一列作為主鍵,如果不指定,相同信息的列都會(huì)作為拼接依據(jù)
3、merge()函數(shù)默認(rèn)的是內(nèi)連接,因此只拼接兩表中擁有相同主鍵信息的行數(shù)據(jù)。
示例:
import pandas as pd
data1 =pd.DataFrame({'key':['K0','K1','K2','K3'],
'A':['A0','A1','A2','A3'],
'B':['B0','B1','B2','B3']})
data3= pd.DataFrame({'key':['K0','K1','K2','K3'],})
data2 = pd.DataFrame({'key':['K0','K1','K2','K3'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']})
result1 = pd.merge(data1,data3,on = 'key')
result2 = pd.merge(data1,data2,on = 'key')
result3 = pd.merge(data3,data2,on = 'key')
print(data1)
print(data2)
print(data3)
print(result1)
print(result2)
print(result3)
運(yùn)行結(jié)果:
key A B
0 K0 A0 B0
1 K1 A1 B1
2 K2 A2 B2
3 K3 A3 B3
key C D
0 K0 C0 D0
1 K1 C1 D1
2 K2 C2 D2
3 K3 C3 D3
key
0 K0
1 K1
2 K2
3 K3
key A B
0 K0 A0 B0
1 K1 A1 B1
2 K2 A2 B2
3 K3 A3 B3
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3
key C D
0 K0 C0 D0
1 K1 C1 D1
2 K2 C2 D2
3 K3 C3 D3
Process finished with exit code 0
left-index, right-index
1、除指定字段可以作為主鍵外,索引也可以考慮作為拼接的主鍵
2、默認(rèn)為False,即不以索引為主鍵
3、如果兩個(gè)表的索引完全一樣,直接拼接效果很好,如果索引有不能對(duì)齊的地方,在默認(rèn)的內(nèi)連接情況下,只會(huì)把索引對(duì)齊的記錄進(jìn)行拼接
示例:
import pandas as pd
df1 = pd.DataFrame({'lkey': ['foo', 'ba', 'baz', 'fo'],
'value': [1, 2, 3, 4]},index=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
'value': [5, 6, 7, 8]},index=['A', 'c', 'B', 'h'])
# result1 = pd.merge(df1,df2,left_on ='lkey')
result2 = pd.merge(df1,df2,left_on ='lkey',right_on ='rkey')
result3 = pd.merge(df1,df2,left_on ='lkey',right_on ='rkey',suffixes=("_lf","_rf"))
result4=pd.merge(df1,df2,left_index=True, right_index=True)
#result6=pd.merge(df1,df2,left_index=True)
result5=pd.merge(df1,df2,left_index=True, right_index=True,suffixes=("_lf","_rf"))
print(df1)
print(df2)
# print(result1)
print(result2)
print(result3)
print(result4)
print(result5)
#print(result6)
運(yùn)行結(jié)果:
lkey value
A foo 1
B ba 2
C baz 3
D fo 4
rkey value
A foo 5
c bar 6
B baz 7
h foo 8
lkey value_x rkey value_y
0 foo 1 foo 5
1 foo 1 foo 8
2 baz 3 baz 7
lkey value_lf rkey value_rf
0 foo 1 foo 5
1 foo 1 foo 8
2 baz 3 baz 7
lkey value_x rkey value_y
A foo 1 foo 5
B ba 2 baz 7
lkey value_lf rkey value_rf
A foo 1 foo 5
B ba 2 baz 7
Process finished with exit code 0
left_on,right_on
兩個(gè)表里沒(méi)有完全一致的列名,但是有信息一致的列
該參數(shù)用來(lái)指定用來(lái)作主鍵的列名是哪一個(gè)
需要保證鍵值長(zhǎng)度相等,len(left_on) == len(right_on)
suffixes
兩個(gè)表中出現(xiàn)相同的列名,除了作為主鍵的列之外,其他名字相同的列被拼接到表中的時(shí)候會(huì)有一個(gè)后綴表示這個(gè)列來(lái)自于哪個(gè)表格,用于區(qū)分名字相同的列,這個(gè)后綴默認(rèn)是(x和y)。這個(gè)后綴是可以自定義修改的
示例:
import pandas as pd
df1 = pd.DataFrame({'lkey': ['foo', 'ba', 'baz', 'fo'],
'value': [1, 2, 3, 4]})
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
'value': [5, 6, 7, 8]})
# result1 = pd.merge(df1,df2,left_on ='lkey')
result2 = pd.merge(df1,df2,left_on ='lkey',right_on ='rkey')
result3 = pd.merge(df1,df2,left_on ='lkey',right_on ='rkey',suffixes=("_lf","_rf"))
print(df1)
print(df2)
# print(result1)
print(result2)
print(result3)
運(yùn)行結(jié)果:
lkey value
0 foo 1
1 ba 2
2 baz 3
3 fo 4
rkey value
0 foo 5
1 bar 6
2 baz 7
3 foo 8
lkey value_x rkey value_y
0 foo 1 foo 5
1 foo 1 foo 8
2 baz 3 baz 7
lkey value_lf rkey value_rf
0 foo 1 foo 5
1 foo 1 foo 8
2 baz 3 baz 7
Process finished with exit code 0
indicator
用于顯示拼接后的表中信息來(lái)自哪個(gè)表
在表的最后一列顯示left_only /right_only/both
默認(rèn)False,可以修改為True
示例:
import pandas as pd
data1 =pd.DataFrame({'key':['K','1','K2','K3'],
'A':['A0','1','A2','A3'],
'B':['B0','B1','B2','B3']})
data2 = pd.DataFrame({'key':['K0','K1','K2','K3'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']})
result=pd.merge(data1,data2,how ='outer',on = ['key'],indicator = True)
print(data1)
print(data2)
print(result)
運(yùn)行結(jié)果:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-742647.html
key A B
0 K A0 B0
1 1 1 B1
2 K2 A2 B2
3 K3 A3 B3
key C D
0 K0 C0 D0
1 K1 C1 D1
2 K2 C2 D2
3 K3 C3 D3
key A B C D _merge
0 K A0 B0 NaN NaN left_only
1 1 1 B1 NaN NaN left_only
2 K2 A2 B2 C2 D2 both
3 K3 A3 B3 C3 D3 both
4 K0 NaN NaN C0 D0 right_only
5 K1 NaN NaN C1 D1 right_only
Process finished with exit code 0
參考文件:
https://zhuanlan.zhihu.com/p/340770510文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-742647.html
到了這里,關(guān)于python數(shù)據(jù)合并之merge函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!