自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

當(dāng)Pandas遇到SQL,如何做關(guān)聯(lián)查詢

運(yùn)維 數(shù)據(jù)庫運(yùn)維
在日常數(shù)據(jù)查詢時(shí),絕大多數(shù)情況是將表格關(guān)聯(lián)起來進(jìn)行查詢的,而不僅僅是對一張表格的數(shù)據(jù)進(jìn)行查詢,常用的數(shù)據(jù)拼接有兩種方法,一種是以行為單位縱向連接,另一種是以列為單位橫向拼接,縱向連接使用的函數(shù)是UNION,水平拼接使用的函數(shù)是JOIN,本節(jié)使用pandasql庫借助SQL語句進(jìn)行表格連接,下面一起來學(xué)習(xí)。

[[428183]]

在日常數(shù)據(jù)查詢時(shí),絕大多數(shù)情況是將表格關(guān)聯(lián)起來進(jìn)行查詢的,而不僅僅是對一張表格的數(shù)據(jù)進(jìn)行查詢,常用的數(shù)據(jù)拼接有兩種方法,一種是以行為單位縱向連接,另一種是以列為單位橫向拼接,縱向連接使用的函數(shù)是UNION,水平拼接使用的函數(shù)是JOIN,本節(jié)使用pandasql庫借助SQL語句進(jìn)行表格連接,下面一起來學(xué)習(xí)。

  • 示例工具:anconda3.7
  • 本文講解內(nèi)容:pandasql庫的使用、SQL連接
  • 適用范圍:在Python中實(shí)現(xiàn)多表連接

數(shù)據(jù)表創(chuàng)建

本節(jié)因?yàn)榘咐枰允孪扔? pandas創(chuàng)建3個(gè)表,數(shù)據(jù)表內(nèi)容包含用戶ID、日期、城市、年齡、性別等字段,三個(gè)表的共同字段都是用戶ID,所以,可以作為連接的主鍵,使用pandas構(gòu)建數(shù)據(jù)表結(jié)果如下。

構(gòu)建第一張表作為基礎(chǔ)表,以用戶ID作為主鍵,進(jìn)行連接。

  1. import pandas as pd 
  2. import datetime 
  3. #構(gòu)造數(shù)據(jù)集df1 
  4. df1 = pd.DataFrame({'用戶ID':[1001,1002,1003,1004,1005,1006], 
  5.                     '日期':pd.date_range(datetime.datetime(2021,3,26),periods=6), 
  6.                     '城市':['北京''上海''廣州''上海''杭州''北京'], 
  7.                     '年齡':[23,44,54,32,34,32], 
  8.                     '性別':['F','M','M','F','F','F'], 
  9.                     '成交量':[3200,1356,2133,6733,2980,3452]}, 
  10.                     columns =['用戶ID','日期','城市','年齡','性別','成交量']) 
  11. df1 

構(gòu)建第二張表,用于數(shù)據(jù)表的橫向連接。

  1. #構(gòu)造數(shù)據(jù)集df2 
  2. df2 = pd.DataFrame({'用戶ID':[1007,1008,1009], 
  3.                     '日期':pd.date_range(datetime.datetime(2021,3,1),periods=3), 
  4.                     '城市':['北京''上海''廣州'], 
  5.                     '年齡':[33,34,34,], 
  6.                     '性別':['F','M','F'], 
  7.                     '成交量':[4200,3356,2633]}, 
  8.                     columns =['用戶ID','日期','城市','年齡','性別','成交量']) 
  9. df2 

構(gòu)建第三張表,以用戶ID為主鍵,用于數(shù)據(jù)表的橫向連接。

  1. #構(gòu)造構(gòu)造列名不同的df3 
  2. df3 = pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006,1007,1008,1009,1010], 
  3.                     "平臺":['京東','淘寶','京東','天貓','唯品會(huì)','蘇寧','天貓','淘寶','美團(tuán)','拼多多'], 
  4.                     "收入額":[100000,320000,240000,445000,340000,640000,300000,460000,540000,230000]}, 
  5.                     columns =['id','平臺','收入額']) 
  6. df3 

橫向連接

首先是表的橫向連接,顧名思義,就是在原基礎(chǔ)表,往下一空行復(fù)制粘貼新的數(shù)據(jù),要求兩張表的列標(biāo)題都是一樣的,才能正常連接,這里使用UNION ALL進(jìn)行連接,表示將列標(biāo)題相同的兩張表連接起來,如果是使用UNION連接,兩張中相同的兩行只會(huì)保留一行連接。

  1. #導(dǎo)入pandasql庫 
  2. import pandasql as sql 
  3.  
  4. #表的橫向連接 
  5. sql.sqldf("""select * from df1 
  6.              union all 
  7.              select * from df2""") 

縱向連接No.1內(nèi)連接

縱向連接是表格連接中使用最廣泛的連接,縱向連接又可以分為內(nèi)連接和外連接,內(nèi)連接,連接表都匹配的記錄才會(huì)出現(xiàn)在最終的結(jié)果集,并且連接順序無關(guān),這里內(nèi)連接的第一種辦法是使用WHERE語句,當(dāng)兩個(gè)表的ID相同時(shí)進(jìn)行連接。

  1. #內(nèi)連接 
  2. sql.sqldf("""select * from df1,df3 
  3.              where df1.用戶ID=df3.id;""") 

除了使用WHERE語句進(jìn)行內(nèi)連接,還可以使用INNER JOIN函數(shù)進(jìn)行內(nèi)連接,當(dāng)兩個(gè)表的ID相同時(shí)進(jìn)行連接。

  1. #內(nèi)連接 
  2. sql.sqldf("""select * from df1 
  3.              inner join df3 
  4.              on df1.用戶ID=df3.id;""") 

縱向連接No.2外連接

外連接以其中一張表為驅(qū)動(dòng)表,與另張表的每條記錄進(jìn)行匹配如果能夠匹配則進(jìn)行關(guān)聯(lián)并展示;如果不能匹配則以null展示,與連接順序有關(guān),這里演示的LEFT JOIN函數(shù),當(dāng)右邊的表與左邊的基礎(chǔ)表的ID一致時(shí),進(jìn)行連接,類似于EXCEL函數(shù)中的VLOOKUP功能。

  1. #左外連接 
  2. sql.sqldf("""select * from df1 
  3.              left join df3 
  4.              on df1.用戶ID=df3.id;""") 

在日常工作使用左外連接的次數(shù)會(huì)很多,一般都是將多個(gè)表進(jìn)行多次左外連接,這個(gè)知識點(diǎn)需要熟練掌握,將上面的連接結(jié)果分別賦值變量,然后導(dǎo)出,結(jié)果如下。

  1. #數(shù)據(jù)導(dǎo)出 
  2. write=pd.ExcelWriter(r'C:\Users\尚天強(qiáng)\Desktop'+'\\SQL連接查詢結(jié)果'+'.xlsx'
  3.  
  4. sqltable1.to_excel(write,sheet_name='SQL橫向連接',index=False
  5. sqltable2.to_excel(write,sheet_name='SQL縱向內(nèi)連接',index=False
  6. sqltable3.to_excel(write,sheet_name='SQL縱向左外連接',index=False
  7.  
  8. write.save() 
  9. write.close() 

本文轉(zhuǎn)載自微信公眾號「大話數(shù)據(jù)分析」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系大話數(shù)據(jù)分析公眾號。

 

 

責(zé)任編輯:武曉燕 來源: 大話數(shù)據(jù)分析
相關(guān)推薦

2022-08-29 08:08:58

SQLOracleCPU

2017-07-25 15:35:07

MysqlMysql優(yōu)化LIMIT分頁

2009-09-25 10:22:35

Hibernate多表

2020-11-05 10:59:45

Mybatis

2012-06-05 02:20:24

JPAJava查詢語言

2011-06-07 15:27:02

SEO

2010-06-03 09:24:46

Oracle

2015-03-18 13:18:45

MySQLSQL優(yōu)化

2015-07-10 15:31:42

ITIoT物聯(lián)網(wǎng)

2022-08-03 09:11:31

React性能優(yōu)化

2015-09-18 15:22:56

DCIMITSM

2020-08-17 14:56:02

PythonSQL

2015-07-30 11:21:16

代碼審查

2021-09-02 18:36:35

SQLWhereOn

2012-03-12 16:42:54

測試

2023-12-29 10:04:47

數(shù)據(jù)分析

2022-02-17 13:18:58

定價(jià)模型營銷AHP

2022-05-11 09:34:15

云原生集群數(shù)倉

2023-10-18 18:31:04

SQL查詢數(shù)據(jù)

2021-04-25 09:19:22

騰訊Code Reviewleader
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號