網(wǎng)站首頁 編程語言 正文
上次介紹了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
相關(guān)推薦
- 2023-01-08 Python?flask與fastapi性能測(cè)試方法介紹_python
- 2023-04-18 Python之split函數(shù)的深入理解_python
- 2022-08-15 C語言排序算法實(shí)現(xiàn)
- 2022-10-18 AJAX淺析數(shù)據(jù)交換的實(shí)現(xiàn)_AJAX相關(guān)
- 2022-03-10 .NET6一些常用組件的配置及使用_基礎(chǔ)應(yīng)用
- 2022-10-08 Python使用xlrd和xlwt實(shí)現(xiàn)自動(dòng)化操作Excel_python
- 2022-05-20 springCloud_Feign遠(yuǎn)程調(diào)用
- 2022-10-31 Rust?實(shí)現(xiàn)?async/await的詳細(xì)代碼_相關(guān)技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支