社区编辑申请
注册/登录
Pandas与SQL的超强结合,爆赞!
开发 后端
使用pandasql读取DataFrame中日期格式的列,默认会读取年月日、时分秒,因此我们要学会使用sqlite中的日期处理函数,方便我们转换日期格式,下方提供sqlite中常用函数大全,希望对你有帮助。

人生苦短,我学Python!

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

简介

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种方式

  • 在使用之前,声明该全局变量;
  • 一次性声明好全局变量;

在使用之前,声明该全局变量

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)

部分结果如下:

一次性声明好全局变量

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)

部分结果如下:

写几个简单的SQL语句

查看sqlite的版本

student = pd.read_excel("student.xlsx")  
pysqldf = lambda q: sqldf(q, globals())
query1 = """
select sqlite_version(*)
"""
pysqldf(query1)

结果如下:

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)

结果如下:

多表连接

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)

部分结果如下:

分组聚合

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)

结果如下:

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)

结果如下:

责任编辑:庞桂玉 来源: 菜鸟学Python
相关推荐

2020-09-15 09:45:23

Pandas代码Python

2022-07-26 00:25:57

PandasQuery索引器

2022-04-25 08:43:47

pandas代码Python

2022-05-10 09:33:50

Pandas技巧代码

2021-10-12 05:00:27

2022-05-24 12:50:58

Pandas索引代码

2022-03-24 09:36:28

Pandas数据分析代码

2022-05-30 08:34:49

PythonSQL

2020-06-02 14:08:55

Python的数据操作

2017-02-28 10:54:40

Pandas

2021-04-09 23:00:12

2022-05-12 09:17:06

SQLPython

2020-11-19 15:26:36

2020-08-14 10:57:49

开发技能代码

2019-11-20 10:54:32

Python数据结构数据库

2020-05-06 09:18:56

Pandas函数大数据技术

2020-08-16 10:58:20

Pandaspython开发

2020-10-29 08:35:06

Pandas函数Python

2020-10-16 11:53:52

数据分析PythonSQL

2020-05-19 17:09:33

Pandas大数据数据分析

同话题下的热门内容

Rust难懂?一文解读其“所有权”和“借用”概念太强了!Python 开发桌面小工具,让代码替我们干重复的工作!K8s需要替代品!你离完全理解 SQL 只差这十步分享六个 Vue3 开发必备的 VSCode 插件程序员如何寻找技术突破、体现技术价值?接口性能优化实战:从20s到500ms,三招搞定六七十岁程序员工资暴涨 就因为这门没啥人学的编程语言

编辑推荐

2017年9月编程语言排行榜:Java、C与C++三巨头还能统治排行榜多久?2017年最受欢迎的5个前端框架比较2017年11月编程语言排行榜:脚本语言怎么了?2017年3月编程语言排行榜:Swift首次进入前十最近租房有点烦!技术人如何用Python找到称心如意的“小窝”?
我收藏的内容
点赞
收藏

51CTO技术栈公众号