京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者:俊欣
来源:关于数据分析与可视化
今天小编打算来讲一下Pandas和SQL之间语法的差异,相信对于不少数据分析师而言,无论是Pandas模块还是SQL,都是日常学习工作当中用的非常多的工具,当然我们也可以在Pandas模块当中来调用SQL语句,通过调用read_sql()方法
首先我们通过SQL语句在新建一个数据库,基本的语法相信大家肯定都清楚,
CREATE TABLE 表名 (
字段名称 数据类型 ...
)
那么我们来看一下具体的代码
import pandas as pd import sqlite3
connector = sqlite3.connect('public.db')
my_cursor = connector.cursor()
my_cursor.executescript("""
CREATE TABLE sweets_types
(
id integer NOT NULL,
name character varying NOT NULL,
PRIMARY KEY (id)
);
...篇幅有限,详细参考源码...
""")
同时我们也往这些新建的表格当中插入数据,代码如下
my_cursor.executescript("""
INSERT INTO sweets_types(name) VALUES
('waffles'),
('candy'),
('marmalade'),
('cookies'),
('chocolate');
...篇幅有限,详细参考源码...
""")
我们可以通过下面的代码来查看新建的表格,并且转换成DataFrame格式的数据集,代码如下
df_sweets = pd.read_sql("SELECT * FROM sweets;", connector)
output
我们总共新建了5个数据集,主要是涉及到了甜品、甜品的种类以及加工和仓储的数据,而例如甜品的数据集当中主要包括的有甜品的重量、糖分的含量、生产的日期和过期的时间、成本等数据,以及
df_manufacturers = pd.read_sql("SELECT * FROM manufacturers", connector)
output
加工的数据集当中则涉及到了工厂的主要负责人和联系方式,而仓储的数据集当中则涉及到了仓储的详细地址、城市所在地等等
df_storehouses = pd.read_sql("SELECT * FROM storehouses", connector)
output
还有甜品的种类数据集,
df_sweets_types = pd.read_sql("SELECT * FROM sweets_types;", connector)
output
接下来我们来做一些数据筛查,例如筛选出甜品当中重量等于300的甜品名称,在Pandas模块中的代码是这个样子的
# 转换数据类型 df_sweets['weight'] = pd.to_numeric(df_sweets['weight']) # 输出结果 df_sweets[df_sweets.weight == 300].name
output
1 Mikus 6 Soucus 11 Macus Name: name, dtype: object
当然我们还可以通过pandas当中的read_sql()方法来调用SQL语句
pd.read_sql("SELECT name FROM sweets WHERE weight = '300'", connector)
output
我们再来看一个相类似的案例,筛选出成本等于100的甜品名称,代码如下
# Pandas df_sweets['cost'] = pd.to_numeric(df_sweets['cost'])
df_sweets[df_sweets.cost == 100].name # SQL pd.read_sql("SELECT name FROM sweets WHERE cost = '100'", connector)
output
Milty
针对文本型的数据,我们也可以进一步来筛选出我们想要的数据,代码如下
# Pandas df_sweets[df_sweets.name.str.startswith('M')].name # SQL pd.read_sql("SELECT name FROM sweets WHERE name LIKE 'M%'", connector)
output
Milty Mikus
Mivi
Mi
Misa
Maltik
Macus
当然在SQL语句当中的通配符,%表示匹配任意数量的字母,而_表示匹配任意一个字母,具体的区别如下
# SQL pd.read_sql("SELECT name FROM sweets WHERE name LIKE 'M%'", connector)
output
pd.read_sql("SELECT name FROM sweets WHERE name LIKE 'M_'", connector)
output
下面我们来看一下多个条件的数据筛选,例如我们想要重量等于300并且成本价控制在150的甜品名称,代码如下
# Pandas df_sweets[(df_sweets.cost == 150) & (df_sweets.weight == 300)].name # SQL pd.read_sql("SELECT name FROM sweets WHERE cost = '150' AND weight = '300'", connector)
output
Mikus
或者是筛选出成本价控制在200-300之间的甜品名称,代码如下
# Pandas df_sweets[df_sweets['cost'].between(200, 300)].name # SQL pd.read_sql("SELECT name FROM sweets WHERE cost BETWEEN '200' AND '300'", connector)
output
要是涉及到排序的问题,在SQL当中使用的是ORDER BY语句,代码如下
# SQL pd.read_sql("SELECT name FROM sweets ORDER BY id DESC", connector)
output
而在Pandas模块当中调用的则是sort_values()方法,代码如下
# Pandas df_sweets.sort_values(by='id', ascending=False).name
output
11 Macus 10 Maltik 9 Sor 8 Co 7 Soviet 6 Soucus 5 Soltic 4 Misa 3 Mi 2 Mivi 1 Mikus 0 Milty Name: name, dtype: object
筛选出成本价最高的甜品名称,在Pandas模块当中的代码是这个样子的
df_sweets[df_sweets.cost == df_sweets.cost.max()].name
output
11 Macus Name: name, dtype: object
而在SQL语句当中的代码,我们需要首先筛选出成本最高的是哪个甜品,然后再进行进一步的处理,代码如下
pd.read_sql("SELECT name FROM sweets WHERE cost = (SELECT MAX(cost) FROM sweets)", connector)
我们想要看一下是仓储的城市具体是有哪几个,在Pandas模块当中的代码是这个样子的,通过调用unique()方法
df_storehouses['city'].unique()
output
array(['Moscow', 'Saint-petersburg', 'Yekaterinburg'], dtype=object)
而在SQL语句当中则对应的是DISTINCT关键字
pd.read_sql("SELECT DISTINCT city FROM storehouses", connector)
在Pandas模块当中分组统计一般调用的都是groupby()方法,然后后面再添加一个统计函数,例如是求分均值的mean()方法,或者是求和的sum()方法等等,例如我们想要查找出在不止一个城市生产加工甜品的名称,代码如下
df_manufacturers.groupby('name').name.count()[df_manufacturers.groupby('name').name.count() > 1]
output
name Mishan 2 Name: name, dtype: int64
而在SQL语句当中的分组也是GROUP BY,后面要是还有其他条件的话,用的是HAVING关键字,代码如下
pd.read_sql(""" SELECT name, COUNT(name) as 'name_count' FROM manufacturers GROUP BY name HAVING COUNT(name) > 1 """, connector)
当两个数据集或者是多个数据集需要进行合并的时候,在Pandas模块当中,我们可以调用merge()方法,例如我们将df_sweets数据集和df_sweets_types两数据集进行合并,其中df_sweets当中的sweets_types_id是该表的外键
df_sweets.head()
output
df_sweets_types.head()
output
具体数据合并的代码如下所示
df_sweets_1 = df_sweets.merge(df_sweets_types, left_on='sweets_types_id', right_on='id')
output
我们再进一步的筛选出巧克力口味的甜品,代码如下
df_sweets_1.query('name_y == "chocolate"').name_x
output
10 Misa 11 Sor Name: name_x, dtype: object
而SQL语句则显得比较简单了,代码如下
# SQL pd.read_sql("""
SELECT sweets.name FROM sweets
JOIN sweets_types ON sweets.sweets_types_id = sweets_types.id
WHERE sweets_types.name = 'chocolate';
""", connector)
output
我们来查看一下数据集的结构,在Pandas模块当中直接查看shape属性即可,代码如下
df_sweets.shape
output
(12, 10)
而在SQL语句当中,则是
pd.read_sql("SELECT count(*) FROM sweets;", connector)
output
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
【核心关键词】客户、数据分析、指标体系、数据采集、数据指标、业务数据、分析思路、业务需求、分析方法 【专访摘要】本次 CDA ...
2026-07-24在数据分析、业务建模与数字化运营体系中,原始业务数据普遍存在缺失、重复、异常、口径不一致等质量问题,直接用于分析与建模会 ...
2026-07-24 很多数据分析师能熟练计算均值、标准差,但当被问到“如何用一张图让业务方3秒内看懂核心结论”“面对不同数据类型该怎么选 ...
2026-07-24在数据驱动的精细化运营体系中,指标是业务判断、效果复盘、策略优化的核心依据。随着企业数据化程度提升,指标数量持续膨胀,但 ...
2026-07-23在用户运营与产品增长体系中,留存是衡量产品真实价值与用户粘性的核心标尺,也是决定用户生命周期价值、获客投产比的底层因素。 ...
2026-07-23 很多数据分析师精通Excel、SQL、Python等工具,但当被问到“面对一个具体的业务问题,该用什么分析方法”“描述性分析和诊断 ...
2026-07-23【核心关键词】埋点、产品、互联网、数据库、决策、数据分析、产品经理、商业模式、移动互联网、指标体系、运营模块、大数据平 ...
2026-07-22在高并发、大数据量的业务系统中,单表数据量达到千万级甚至亿级后,会出现查询性能骤降、索引维护成本飙升、存储扩容困难等问题 ...
2026-07-22 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-07-22在金融风控、企业运营、行业研究等数据分析场景中,大量数据以面板数据形态存在:例如多家分支机构连续多个季度的风险指标、多位 ...
2026-07-21 很多数据分析师每天都在计算指标、制作报表,但当被问到“什么叫指标数据元”“指标数据标准包含哪些核心维度”“指标数据质 ...
2026-07-21一、活动介绍 2026暑期CDA备考冲刺季,为想利用假期拿证的你量身打造。考点胶囊内容搭配多重硬核福利,让你在旅行、实习、居家 ...
2026-07-21金融行业的运营风险贯穿业务全流程,涵盖交易欺诈、操作违规、流程漏洞、合规偏差、客户信用异常等多元场景,是银行、保险、证券 ...
2026-07-17财产保险作为金融行业的核心板块,涵盖车险、家财险、责任险、企财险等多元品类,是个人与企业抵御财产风险、经营风险的重要保障 ...
2026-07-17 很多数据分析师能熟练写SQL、做透视表,但当被问到“数据是从哪里来的?经过哪些加工才进入数据仓库?ETL具体做了什么?”时 ...
2026-07-17【核心关键词】模块、餐饮、客户、门店、企业、订单、供应链、多样化、产品、生产计划、数据分析、生产管理、物料管理、业务分 ...
2026-07-16在数字化分析时代,原始数据本身不具备业务价值,只有通过科学的统计学方法加工、拆解、验证与解读,才能挖掘数据背后的规律、差 ...
2026-07-16 很多数据分析师能熟练地写SQL、做透视表、算描述性统计,但当被问到“如何预测用户流失概率”“如何归因销量下滑的关键因素 ...
2026-07-16在描述性统计分析、数据预处理、异常值排查与多组数据分布对比工作中,箱线图(Box Plot)是应用最广泛的可视化与统计工具之一。 ...
2026-07-15在企业数据存储、业务统计与数据分析工作中,绝大多数业务数据都带有时间维度属性,例如订单创建时间、用户注册时间、支付完成时 ...
2026-07-15