美文网首页
当pandas撞上了sql,于是一个强大的pandasql库产生

当pandas撞上了sql,于是一个强大的pandasql库产生

作者: 践行数据分析 | 来源:发表于2020-09-03 15:02 被阅读0次

1. 演示数据

本文的所有演示数据,均是基于下方的四张表。下面这四张表大家应该不陌生,这就是网传50道经典MySQL面试题中使用到的几张原表。关于下方各表之间的关联关系,我就不给大家说明了,仔细观察字段名,应该就可以发现。

2. pandasql的使用

1)简介

pandas中的DataFrame是一个二维表格,数据库中的表也是一个二维表格,因此在pandas中使用sql语句就显得水到渠成,pandasql使用SQLite作为其操作数据库,同时Python自带SQLite模块,不需要安装,便可直接使用。

这里有一点需要注意的是:使用pandasql读取DataFrame中日期格式的列,默认会读取年月日、时分秒,因此我们要学会使用sqlite中的日期处理函数,方便我们转换日期格式,下方提供sqlite中常用函数大全,希望对你有帮助。

sqlite函数大全http://suo.im/5DWraE

导入相关库:

import pandas as pd

from pandasql import sqldf

2)声明全局变量的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*fromdf1limit5"

query2 = "

select*fromdf2limit5"

query3 = "

select*fromdf3"

query4 = "

select*fromdf4"

sqldf(query1)

sqldf(query2)

sqldf(query3)

sqldf(query4)

部分结果如下:

② 一次性声明好全局变量

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*fromdf1limit5"

query2 = "

select*fromdf2limit5"

query3 = "

select*fromdf3"

query4 = "

select*fromdf4"

sqldf(query1)

sqldf(query2)

sqldf(query3)

sqldf(query4)

部分结果如下:

3)写几个简单的SQL语句

① 查看sqlite的版本

student = pd.read_excel("student.xlsx")

pysqldf = lambda q: sqldf(q, globals())

query1 = """

selectsqlite_version(*)

"""

pysqldf(query1)

结果如下:

② where筛选

student = pd.read_excel("student.xlsx")

pysqldf = lambda q: sqldf(q, globals())

query1 = """

select*

fromstudent

wherestrftime('%Y-%m-%d',sage) ='1990-01-01'

"""

pysqldf(query1)

结果如下:

③ 多表连接

student = pd.read_excel("student.xlsx")

sc = pd.read_excel("sc.xlsx")

pysqldf = lambda q: sqldf(q, globals())

query2 = """

select*

fromstudent s

joinscons.sid = sc.sid

"""

pysqldf(query2)

部分结果如下:

④ 分组聚合

student = pd.read_excel("student.xlsx")

sc = pd.read_excel("sc.xlsx")

pysqldf = lambda q: sqldf(q, globals())

query2 = """

selects.snameas姓名,sum(sc.score)as总分

fromstudent s

joinscons.sid = sc.sid

groupbys.sname

"""

pysqldf(query2)

结果如下:

⑤ union查询

student = pd.read_excel("student.xlsx")

pysqldf = lambda q: sqldf(q, globals())

query1 = """

select*

fromstudent

wherestrftime('%Y-%m',sage) ='1990-01'

union

select*

fromstudent

wherestrftime('%Y-%m',sage) ='1990-12'

"""

pysqldf(query1)

结果如下:

相关文章

网友评论

      本文标题:当pandas撞上了sql,于是一个强大的pandasql库产生

      本文链接:https://www.haomeiwen.com/subject/agtosktx.html