当前位置: 首页 > 科技观察

Pandas和SQL的超级结合,太棒了!

时间:2023-03-13 22:47:33 科技观察

人生苦短,我学Python!本文所有演示数据均基于以下四张表格。下面这四张表大家应该都不陌生了。以上是网上发布的50道经典MySQL面试题中使用的原表。关于下表之间的关系,我就不跟大家解释了。您应该能够通过仔细观察字段名称找到它。pandas中的DataFrame是一个二维表,数据库中的表也是一个二维表。因此,在pandas中使用sql语句似乎是水到渠成的事情。Pandasql使用SQLite作为它的运行数据库。同时Python有自己的SQLite模块,不需要安装,可以直接使用。这里需要注意一点:使用pandasql读取DataFrame中的日期格式列,默认会读取年月日时分秒。所以,我们需要学习使用sqlite中的日期处理函数,方便我们进行日期格式的转换。下面提供了一个完整的sqlite常用函数合集,希望对你有所帮助。sqlite函数百科:http://suo.im/5DWraE导入相关库:importpandasaspdfrompandasqlimportsqldf声明全局变量的两种方式使用前声明全局变量;声明一次全局变量;使用之前,声明全局变量df1=pd.read_excel("student.xlsx")df2=pd.read_excel("sc.xlsx")df3=pd.read_excel("course.xlsx")df4=pd.read_excel("teacher.xlsx")globaldf1globaldf2globaldf3globaldf4query1="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=lambdaq:sqldf(q,globals())query1="select*fromdf1limit5"query2="select*fromdf2limit5"query3="select*fromdf3"query4="select*fromdf4"sqldf(query1)sqldf(query2)sqldf(query3)sqldf(query4)部分结果如下:写几个简单的SQL语句检查sqlite的版本student=pd.read_excel("student.xlsx")pysqldf=lambdaq:sqldf(q,globals())query1="""selectsqlite_version(*)"""pysqldf(query1)结果如下:wherefilterstudent=pd.read_excel("student.xlsx")pysqldf=lambdaq:sqldf(q,globals())query1="""select*fromstudent其中strftime('%Y-%m-%d',sage)='1990-01-01'"""pysqldf(query1)结果如下:多表连接student=pd.read_excel("student.xlsx")sc=pd.read_excel("sc.xlsx")pysqldf=lambdaq:sqldf(q,globals())query2="""select*fromstudentsjoinscons.sid=sc.sid"""pysqldf(query2)部分结果如下:groupaggregationstudent=pd.read_excel("student.xlsx")sc=pd.read_excel("sc.xlsx")pysqldf=lambdaq:sqldf(q,globals())query2="""选择s.sname作为名称,sum(sc.score)作为学生s的总分joinscons.sid=sc.sidgroupbys.sname"""pysqldf(query2)结果如下:unionquerystudent=pd.read_excel("student.xlsx")pysqldf=lambdaq:sqldf(q,globals())query1="""从学习中选择*nt在哪里strftime('%Y-%m',sage)='1990-01'unionselect*fromstudentwherestrftime('%Y-%m',sage)='1990-12'"""pysqldf(query1)结果如下: