日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Pandas實(shí)現(xiàn)兩個(gè)表的連接功能的方法詳解_python

作者:派森醬 ? 更新時(shí)間: 2022-10-28 編程語言

上次介紹了pandas的多條件篩選,這些都是一些數(shù)據(jù)處理的必要技能,也不貪多,咱們每次學(xué)習(xí)一點(diǎn)。

這次咱們說說pandas的兩個(gè)表的連接技能merge,也就是根據(jù)一個(gè)表的條件去匹配另一個(gè)表的內(nèi)容。

話不多說,直接正文。

準(zhǔn)備數(shù)據(jù)

先導(dǎo)入模塊

import?pandas?as?pd

df1?=?pd.DataFrame({
????'姓名':?['張三',?'李四',?'王五',?'劉六',?'齊四'],
????'號(hào)碼':?['123',?'456',?'789',?'987',?'654']
})

df2?=?pd.DataFrame({
????'姓名':?['張三',?'張三',?'張三',?'李四',?'李四',?'李四',?'李四',?'王五',?'王五',?'劉玉',?'胡軍',?'劉玉',?'劉六',?'劉六',?'劉六',?'劉六',?'劉克',?'劉玉',?'齊七',?'齊七',?'齊七',?'齊七',?'馮亮',?'劉玉',?'王云'],

????'號(hào)碼':?['123',?'123',?'123',?'123',?'123',?'456',?'456',?'456',?'456',?'456',?'741',?'741',?'741',?'741',?'741',?'789',?'789',?'789',?'789',?'789',?'852',?'852',?'852',?'852',?'852'],

????'日期':?['2022-03-13',?'2022-03-06',?'2022-01-30',?'2022-01-04',?'2022-02-26',?'2022-03-26',?'2022-03-06',?'2022-01-30',?'2022-01-29',?'2022-03-13',?'2022-03-06',?'2022-02-19',?'2022-02-04',?'2022-03-10',?'2022-04-19',?'2022-03-10',?'2022-01-29',?'2022-02-19',?'2022-03-06',?'2022-03-26',?'2022-01-04',?'2022-02-04',?'2022-04-19',?'2022-02-26',?'2022-03-06'],

????'方案':?['G1012',?'G1022',?'G1002',?'G1007',?'G1017',?'G1023',?'G1018',?'G1003',?'G1008',?'G1013',?'G1020',?'G1015',?'G1010',?'G1005',?'G1025',?'G1004',?'G1009',?'G1014',?'G1019',?'G1024',?'G1006',?'G1011',?'G1026',?'G1016',?'G1021']
})

輸出內(nèi)容

df1內(nèi)容

? ?姓名 ? 號(hào)碼
0 ?張三 ?123
1 ?李四 ?456
2 ?王五 ?789
3 ?劉六 ?987
4 ?齊四 ?654

df2內(nèi)容:

? ? 姓名 ?號(hào)碼 ? ?日期 ? ? ?方案
0 ? 張三 ?123 ?2022-03-13 ?G1012
1 ? 張三 ?123 ?2022-03-06 ?G1022
2 ? 張三 ?123 ?2022-01-30 ?G1002
3 ? 李四 ?123 ?2022-01-04 ?G1007
4 ? 李四 ?123 ?2022-02-26 ?G1017
5 ? 李四 ?456 ?2022-03-26 ?G1023
6 ? 李四 ?456 ?2022-03-06 ?G1018
7 ? 王五 ?456 ?2022-01-30 ?G1003
8 ? 王五 ?456 ?2022-01-29 ?G1008
9 ? 劉玉 ?456 ?2022-03-13 ?G1013
10 ?胡軍 ?741 ?2022-03-06 ?G1020
11 ?劉玉 ?741 ?2022-02-19 ?G1015
12 ?劉六 ?741 ?2022-02-04 ?G1010
13 ?劉六 ?741 ?2022-03-10 ?G1005
14 ?劉六 ?741 ?2022-04-19 ?G1025
15 ?劉六 ?789 ?2022-03-10 ?G1004
16 ?劉克 ?789 ?2022-01-29 ?G1009
17 ?劉玉 ?789 ?2022-02-19 ?G1014
18 ?齊七 ?789 ?2022-03-06 ?G1019
19 ?齊七 ?789 ?2022-03-26 ?G1024
20 ?齊七 ?852 ?2022-01-04 ?G1006
21 ?齊七 ?852 ?2022-02-04 ?G1011
22 ?馮亮 ?852 ?2022-04-19 ?G1026
23 ?劉玉 ?852 ?2022-02-26 ?G1016
24 ?王云 ?852 ?2022-03-06 ?G1021

連接

函數(shù)說明:pd.merge(left=df1(需要匹配的原始表), right=df2(被匹配的數(shù)據(jù)表), on="姓名"(需要匹配的條件列), how="inner"(連接方式))

內(nèi)連接

how默認(rèn)為inner:內(nèi)連接查詢特點(diǎn)是df1有匹配的才顯示,不匹配的不顯示

df?=?pd.merge(left=df1,?right=df2,?on="姓名",?how="inner")

輸出:

? ? 姓名 號(hào)碼_x 號(hào)碼_y ?日期 ? ? 方案
0 ? 張三 ?123 ?123 ?2022-03-13 ?G1012
1 ? 張三 ?123 ?123 ?2022-03-06 ?G1022
2 ? 張三 ?123 ?123 ?2022-01-30 ?G1002
3 ? 李四 ?456 ?123 ?2022-01-04 ?G1007
4 ? 李四 ?456 ?123 ?2022-02-26 ?G1017
5 ? 李四 ?456 ?456 ?2022-03-26 ?G1023
6 ? 李四 ?456 ?456 ?2022-03-06 ?G1018
7 ? 王五 ?789 ?456 ?2022-01-30 ?G1003
8 ? 王五 ?789 ?456 ?2022-01-29 ?G1008
9 ? 劉六 ?987 ?741 ?2022-02-04 ?G1010
10 ?劉六 ?987 ?741 ?2022-03-10 ?G1005
11 ?劉六 ?987 ?741 ?2022-04-19 ?G1025
12 ?劉六 ?987 ?789 ?2022-03-10 ?G1004

df1表里需要匹配的姓名里,在df2里面能匹配上姓名的都會(huì)列出來,而匹配不上的,都不會(huì)列出來,包括df1里面的內(nèi)容

小提示:如果兩表有相同列名的,會(huì)自動(dòng)在列名后面加_x,_y來區(qū)分

外連接

how="outer"為外連接:查詢特點(diǎn)是無論匹不匹配都顯示,對(duì)應(yīng)的值沒有則顯示空

df?=?pd.merge(left=df1,?right=df2,?on="姓名",?how="outer")

輸出:

? ? 姓名 號(hào)碼_x 號(hào)碼_y ? 日期 ? ? 方案
0 ? 張三 ?123 ?123 ?2022-03-13 ?G1012
1 ? 張三 ?123 ?123 ?2022-03-06 ?G1022
2 ? 張三 ?123 ?123 ?2022-01-30 ?G1002
3 ? 李四 ?456 ?123 ?2022-01-04 ?G1007
4 ? 李四 ?456 ?123 ?2022-02-26 ?G1017
5 ? 李四 ?456 ?456 ?2022-03-26 ?G1023
6 ? 李四 ?456 ?456 ?2022-03-06 ?G1018
7 ? 王五 ?789 ?456 ?2022-01-30 ?G1003
8 ? 王五 ?789 ?456 ?2022-01-29 ?G1008
9 ? 劉六 ?987 ?741 ?2022-02-04 ?G1010
10 ?劉六 ?987 ?741 ?2022-03-10 ?G1005
11 ?劉六 ?987 ?741 ?2022-04-19 ?G1025
12 ?劉六 ?987 ?789 ?2022-03-10 ?G1004
13 ?齊四 ?654 ?NaN ? ? ? ? NaN ? ?NaN
14 ?劉玉 ?NaN ?456 ?2022-03-13 ?G1013
15 ?劉玉 ?NaN ?741 ?2022-02-19 ?G1015
16 ?劉玉 ?NaN ?789 ?2022-02-19 ?G1014
17 ?劉玉 ?NaN ?852 ?2022-02-26 ?G1016
18 ?胡軍 ?NaN ?741 ?2022-03-06 ?G1020
19 ?劉克 ?NaN ?789 ?2022-01-29 ?G1009
20 ?齊七 ?NaN ?789 ?2022-03-06 ?G1019
21 ?齊七 ?NaN ?789 ?2022-03-26 ?G1024
22 ?齊七 ?NaN ?852 ?2022-01-04 ?G1006
23 ?齊七 ?NaN ?852 ?2022-02-04 ?G1011
24 ?馮亮 ?NaN ?852 ?2022-04-19 ?G1026
25 ?王云 ?NaN ?852 ?2022-03-06 ?G1021

df1表里索引13里的齊四無匹配,是空值,而在df2里面的內(nèi)容都會(huì)列出來,和df1匹配不上的其它列的內(nèi)容也是空值

注意:這有點(diǎn)互相匹配的意思喲

左連接

how="left"為左連接:查詢表示左邊的值全部顯示,如右邊無匹配則顯示空。但是右邊有的值匹配不了左邊則不顯示

df?=?pd.merge(left=df1,?right=df2,?on="姓名",?how="outer")

輸出:

? ? 姓名 號(hào)碼_x 號(hào)碼_y ? 日期 ? ? 方案
0 ? 張三 ?123 ?123 ?2022-03-13 ?G1012
1 ? 張三 ?123 ?123 ?2022-03-06 ?G1022
2 ? 張三 ?123 ?123 ?2022-01-30 ?G1002
3 ? 李四 ?456 ?123 ?2022-01-04 ?G1007
4 ? 李四 ?456 ?123 ?2022-02-26 ?G1017
5 ? 李四 ?456 ?456 ?2022-03-26 ?G1023
6 ? 李四 ?456 ?456 ?2022-03-06 ?G1018
7 ? 王五 ?789 ?456 ?2022-01-30 ?G1003
8 ? 王五 ?789 ?456 ?2022-01-29 ?G1008
9 ? 劉六 ?987 ?741 ?2022-02-04 ?G1010
10 ?劉六 ?987 ?741 ?2022-03-10 ?G1005
11 ?劉六 ?987 ?741 ?2022-04-19 ?G1025
12 ?劉六 ?987 ?789 ?2022-03-10 ?G1004
13 ?齊四 ?654 ?NaN ? ? ? ? NaN ? ?NaN

df1表里索引13里的齊四還是無匹配,是空值,而在df2里面的內(nèi)容就不會(huì)列出來了

右連接

how="right"為右連接:與左連接相反

df?=?pd.merge(left=df1,?right=df2,?on="姓名",?how="right")

輸出:

? ? 姓名 號(hào)碼_x 號(hào)碼_y ? ? ? ? ?日期 ? ? 方案
0 ? 張三 ?123 ?123 ?2022-03-13 ?G1012
1 ? 張三 ?123 ?123 ?2022-03-06 ?G1022
2 ? 張三 ?123 ?123 ?2022-01-30 ?G1002
3 ? 李四 ?456 ?123 ?2022-01-04 ?G1007
4 ? 李四 ?456 ?123 ?2022-02-26 ?G1017
5 ? 李四 ?456 ?456 ?2022-03-26 ?G1023
6 ? 李四 ?456 ?456 ?2022-03-06 ?G1018
7 ? 王五 ?789 ?456 ?2022-01-30 ?G1003
8 ? 王五 ?789 ?456 ?2022-01-29 ?G1008
9 ? 劉玉 ?NaN ?456 ?2022-03-13 ?G1013
10 ?胡軍 ?NaN ?741 ?2022-03-06 ?G1020
11 ?劉玉 ?NaN ?741 ?2022-02-19 ?G1015
12 ?劉六 ?987 ?741 ?2022-02-04 ?G1010
13 ?劉六 ?987 ?741 ?2022-03-10 ?G1005
14 ?劉六 ?987 ?741 ?2022-04-19 ?G1025
15 ?劉六 ?987 ?789 ?2022-03-10 ?G1004
16 ?劉克 ?NaN ?789 ?2022-01-29 ?G1009
17 ?劉玉 ?NaN ?789 ?2022-02-19 ?G1014
18 ?齊七 ?NaN ?789 ?2022-03-06 ?G1019
19 ?齊七 ?NaN ?789 ?2022-03-26 ?G1024
20 ?齊七 ?NaN ?852 ?2022-01-04 ?G1006
21 ?齊七 ?NaN ?852 ?2022-02-04 ?G1011
22 ?馮亮 ?NaN ?852 ?2022-04-19 ?G1026
23 ?劉玉 ?NaN ?852 ?2022-02-26 ?G1016
24 ?王云 ?NaN ?852 ?2022-03-06 ?G1021

右連接正好與左連接相反,df1里面匹配不上的不顯示,df2里面的內(nèi)容全都出來了,匹配不上df1的其它列值則為空值

PS這完全是反向匹配呀

原文鏈接:https://mp.weixin.qq.com/s/i3HIMO3dkC6OBkFZQowgNQ

欄目分類
最近更新