【mysql+pandas】用MySQL命令处理在python中处理DataFrame数据 pandasql库




我们在使用python做数据处理时,不仅仅能使用python的相关方法,借助pandasql库提供的接口,我们还可以使用mysql的命令。这无疑给mysql高手们在python数据处理中又打开了一扇窗。
pandasql库的安装命令:
pip install pandasql -i https://pypi.tuna.tsinghua.edu.cn/simple
在Python中执行MySQL命令,可以使用pandasql库中的 sqldf() 方法。
使用sqldf()方法主要需要考虑传入两个参数,第一个即sql命令。
再者就是需要指定作用域,这个参数可以选择locals()和globals() 。
locals() 表示局部作用域,globals() 表示全局作用域。
“select * from 表名”中的表名,即DataFrame的变量名。程序会从 局部 或 全局 的变量中寻找变量名等于表名的变量,来做查询。
首先准备一组数据
import pandas as pd
import pandasql as pdsql
df = pd.DataFrame({'品种':list('AAAABBBCCD'),
'类型':list('abcdccdadd'),
'金额':[1,1,1,1,1,1,1,1,1,1]
})
df
数据展示如下:

先做一个简单的示例。只查询所有金额数据为例:
编辑SQL命令并执行:
sql1 = """
select 品种 from df
"""
# 执行
r1 = pdsql.sqldf(sql1, globals())
r1
查询结果如下:

然后做一个复杂些的聚合查询:
sql2 = """
SELECT 品种,
SUM(CASE WHEN 类型 IN ('a','b','c')
THEN 金额
ELSE 0
END
) '属于abc类型的金额汇总',
SUM(金额) '按品种汇总金额',
PRINTF('%2.2f%%',
SUM(CASE WHEN 类型 IN ('a','b','c')
THEN 金额
ELSE 0
END)*1.0/SUM(金额)) '占比'
FROM df
GROUP BY 品种"""
r2 = pdsql.sqldf(sql2, globals())
r2
查询结果如下:

本次分享就到这里,小啾感谢您的关注与支持!
🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ