Pandas與SQL的超強(qiáng)結(jié)合,爆贊!

網(wǎng)傳50道經(jīng)典MySQL面試題中使用到的幾張?jiān)?。關(guān)于下方各表之間的關(guān)聯(lián)關(guān)系,我就不給大家說(shuō)明了,仔細(xì)觀(guān)察字段名,應(yīng)該就可以發(fā)現(xiàn)。
簡(jiǎn)介
pandas中的DataFrame是一個(gè)二維表格,數(shù)據(jù)庫(kù)中的表也是一個(gè)二維表格,因此在pandas中使用sql語(yǔ)句就顯得水到渠成,pandasql使用SQLite作為其操作數(shù)據(jù)庫(kù),同時(shí)Python自帶SQLite模塊,不需要安裝,便可直接使用。
這里有一點(diǎn)需要注意的是:使用pandasql讀取DataFrame中日期格式的列,默認(rèn)會(huì)讀取年月日、時(shí)分秒,因此我們要學(xué)會(huì)使用sqlite中的日期處理函數(shù),方便我們轉(zhuǎn)換日期格式,下方提供sqlite中常用函數(shù)大全,希望對(duì)你有幫助。
sqlite函數(shù)大全:http://suo.im/5DWraE
導(dǎo)入相關(guān)庫(kù):
import?pandas?as?pd??
from?pandasql?import?sqldf
聲明全局變量的2種方式
在使用之前,聲明該全局變量;
一次性聲明好全局變量;
在使用之前,聲明該全局變量
df1?=?pd.read_excel("student.xlsx")
df2?=?pd.read_excel("sc.xlsx")
df3?=?pd.read_excel("course.xlsx")
df4?=?pd.read_excel("teacher.xlsx")
global?df1
global?df2
global?df3
global?df4
query1?=?"select?*?from?df1?limit?5"
query2?=?"select?*?from?df2?limit?5"
query3?=?"select?*?from?df3"
query4?=?"select?*?from?df4"
sqldf(query1)
sqldf(query2)
sqldf(query3)
sqldf(query4)
部分結(jié)果如下:

一次性聲明好全局變量
df1?=?pd.read_excel("student.xlsx")??
df2?=?pd.read_excel("sc.xlsx")??
df3?=?pd.read_excel("course.xlsx")??
df4?=?pd.read_excel("teacher.xlsx")??
??
pysqldf?=?lambda?q:?sqldf(q,?globals())??
??
query1?=?"select?*?from?df1?limit?5"??
query2?=?"select?*?from?df2?limit?5"??
query3?=?"select?*?from?df3"??
query4?=?"select?*?from?df4"??
??
sqldf(query1)??
sqldf(query2)??
sqldf(query3)??
sqldf(query4)
部分結(jié)果如下:

寫(xiě)幾個(gè)簡(jiǎn)單的SQL語(yǔ)句
查看sqlite的版本
student?=?pd.read_excel("student.xlsx")??
pysqldf?=?lambda?q:?sqldf(q,?globals())??
query1?=?"""??
????select?sqlite_version(*)??
"""??
pysqldf(query1)
結(jié)果如下:

where篩選
student?=?pd.read_excel("student.xlsx")??
pysqldf?=?lambda?q:?sqldf(q,?globals())??
query1?=?"""??
????select?*???
????from?student???
????where?strftime('%Y-%m-%d',sage)?=?'1990-01-01'??
"""??
pysqldf(query1)
結(jié)果如下:

多表連接
student?=?pd.read_excel("student.xlsx")??
sc?=?pd.read_excel("sc.xlsx")??
??
??
pysqldf?=?lambda?q:?sqldf(q,?globals())??
query2?=?"""??
????select?*??
????from?student?s??
????join?sc?on?s.sid?=?sc.sid??
"""??
pysqldf(query2)
部分結(jié)果如下:

分組聚合
student?=?pd.read_excel("student.xlsx")??
sc?=?pd.read_excel("sc.xlsx")??
??
pysqldf?=?lambda?q:?sqldf(q,?globals())??
query2?=?"""??
????select?s.sname?as?姓名,sum(sc.score)?as?總分??
????from?student?s??
????join?sc?on?s.sid?=?sc.sid??
????group?by?s.sname??
"""??
pysqldf(query2)
結(jié)果如下:

union查詢(xún)
student?=?pd.read_excel("student.xlsx")??
pysqldf?=?lambda?q:?sqldf(q,?globals())??
query1?=?"""??
????select?*???
????from?student???
????where?strftime('%Y-%m',sage)?=?'1990-01'??
????union??
????select?*???
????from?student???
????where?strftime('%Y-%m',sage)?=?'1990-12'??
"""??
pysqldf(query1)
結(jié)果如下:

推薦閱讀:
入門(mén):?最全的零基礎(chǔ)學(xué)Python的問(wèn)題? |?零基礎(chǔ)學(xué)了8個(gè)月的Python??|?實(shí)戰(zhàn)項(xiàng)目?|學(xué)Python就是這條捷徑
干貨:爬取豆瓣短評(píng),電影《后來(lái)的我們》?|?38年NBA最佳球員分析?|? ?從萬(wàn)眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個(gè)海量小姐姐素描圖?|碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影
趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!
AI:?會(huì)做詩(shī)的機(jī)器人?|?給圖片上色?|?預(yù)測(cè)收入?|?碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影
小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水?。?/a>?|?一鍵把html網(wǎng)頁(yè)保存為pdf!|??再見(jiàn)PDF提取收費(fèi)!?|?用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r(jià)機(jī)票提示器!?|60行代碼做了一個(gè)語(yǔ)音壁紙切換器天天看小姐姐!|
年度爆款文案
點(diǎn)閱讀原文,看B站我的20個(gè)視頻!

