網站首頁 編程語言 正文
上次介紹了pandas
的多條件篩選,這些都是一些數據處理的必要技能,也不貪多,咱們每次學習一點。
這次咱們說說pandas
的兩個表的連接技能merge
,也就是根據一個表的條件去匹配另一個表的內容。
話不多說,直接正文。
準備數據
先導入模塊
import?pandas?as?pd df1?=?pd.DataFrame({ ????'姓名':?['張三',?'李四',?'王五',?'劉六',?'齊四'], ????'號碼':?['123',?'456',?'789',?'987',?'654'] }) df2?=?pd.DataFrame({ ????'姓名':?['張三',?'張三',?'張三',?'李四',?'李四',?'李四',?'李四',?'王五',?'王五',?'劉玉',?'胡軍',?'劉玉',?'劉六',?'劉六',?'劉六',?'劉六',?'劉克',?'劉玉',?'齊七',?'齊七',?'齊七',?'齊七',?'馮亮',?'劉玉',?'王云'], ????'號碼':?['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'] })
輸出內容
df1內容
? ?姓名 ? 號碼
0 ?張三 ?123
1 ?李四 ?456
2 ?王五 ?789
3 ?劉六 ?987
4 ?齊四 ?654
df2內容:
? ? 姓名 ?號碼 ? ?日期 ? ? ?方案
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
連接
函數說明:pd.merge(left=df1(需要匹配的原始表), right=df2(被匹配的數據表), on="姓名"(需要匹配的條件列), how="inner"(連接方式))
內連接
how
默認為inner
:內連接查詢特點是df1
有匹配的才顯示,不匹配的不顯示
df?=?pd.merge(left=df1,?right=df2,?on="姓名",?how="inner")
輸出:
? ? 姓名 號碼_x 號碼_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
里面能匹配上姓名的都會列出來,而匹配不上的,都不會列出來,包括df1
里面的內容
小提示:如果兩表有相同列名的,會自動在列名后面加_x
,_y
來區分
外連接
how="outer"
為外連接:查詢特點是無論匹不匹配
都顯示,對應的值沒有則顯示空
df?=?pd.merge(left=df1,?right=df2,?on="姓名",?how="outer")
輸出:
? ? 姓名 號碼_x 號碼_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
里面的內容都會列出來,和df1
匹配不上的其它列的內容也是空值
注意:這有點互相匹配的意思喲
左連接
how="left"
為左連接:查詢表示左邊的值全部顯示,如右邊無匹配則顯示空。但是右邊有的值匹配不了左邊則不顯示
df?=?pd.merge(left=df1,?right=df2,?on="姓名",?how="outer")
輸出:
? ? 姓名 號碼_x 號碼_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
里面的內容就不會列出來了
右連接
how="right"
為右連接:與左連接相反
df?=?pd.merge(left=df1,?right=df2,?on="姓名",?how="right")
輸出:
? ? 姓名 號碼_x 號碼_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
里面的內容全都出來了,匹配不上df1
的其它列值則為空值
PS這完全是反向匹配呀
原文鏈接:https://mp.weixin.qq.com/s/i3HIMO3dkC6OBkFZQowgNQ
相關推薦
- 2022-08-26 詳解Python中元組的三個不常用特性_python
- 2022-08-26 一篇文章學會GO語言中的變量_Golang
- 2023-04-21 深入理解Python中__init__.py文件_python
- 2023-02-12 一文帶你了解Golang中reflect反射的常見錯誤_Golang
- 2022-06-02 C語言基于EasyX庫實現有圖形界面時鐘_C 語言
- 2022-07-12 Linux下Redis6集群安裝部署指南
- 2022-12-05 Windows的sc命令詳解(sc命令用法)_DOS/BAT
- 2022-05-10 thymeleaf給響應頁面傳遞參數(modelandview 中的model)
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支