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

2. pandasql的使用
1)簡介
pandas中的DataFrame是一個二維表格,數(shù)據(jù)庫中的表也是一個二維表格,因此在pandas中使用sql語句就顯得水到渠成,pandasql使用SQLite作為其操作數(shù)據(jù)庫,同時Python自帶SQLite模塊,不需要安裝,便可直接使用。
這里有一點需要注意的是:使用pandasql讀取DataFrame中日期格式的列,默認會讀取年月日、時分秒,因此我們要學會使用sqlite中的日期處理函數(shù),方便我們轉(zhuǎn)換日期格式,下方提供sqlite中常用函數(shù)大全,希望對你有幫助。
sqlite函數(shù)大全:http://suo.im/5DWraE
導入相關(guān)庫:
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)寫幾個簡單的SQL語句
① 查看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é)果如下:

評論
圖片
表情
