
作者:俊欣
來源:關于數據分析與可視化
今天小編打算來講一下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數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25