Pandas與SQL的超強(qiáng)結(jié)合,爆贊!
1. 演示數(shù)據(jù)
本文的所有演示數(shù)據(jù),均是基于下方的四張表。下面這四張表大家應(yīng)該不陌生,這就是網(wǎng)傳50道經(jīng)典MySQL面試題中使用到的幾張?jiān)?。關(guān)于下方各表之間的關(guān)聯(lián)關(guān)系,我就不給大家說(shuō)明了,仔細(xì)觀察字段名,應(yīng)該就可以發(fā)現(xiàn)。

2. pandasql的使用
1)簡(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?sqldf2)聲明全局變量的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?df4query1?=?"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é)果如下:

3)寫(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查詢
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é)果如下:

評(píng)論
圖片
表情
