Pandas執(zhí)行SQL操作的實(shí)現(xiàn)
我們知道,使用 SQL 語(yǔ)句能夠完成對(duì) table 的增刪改查操作,Pandas 同樣也可以實(shí)現(xiàn) SQL 語(yǔ)句的基本功能。本節(jié)主要講解 Pandas 如何執(zhí)行 SQL 操作。
首先加載一個(gè)某連鎖咖啡廳地址分布的數(shù)據(jù)集,通過(guò)該數(shù)據(jù)集對(duì)本節(jié)內(nèi)容進(jìn)行講解。
import pandas as pd df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx") print(df)
輸出結(jié)果如下:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
0 7369 SMITH CLERK 7902.0 1980-12-17 800 NaN 20
1 7499 ALLEN SALESMAN 7698.0 1981-02-20 1600 300.0 30
2 7521 WARD SALESMAN 7698.0 1981-02-22 1250 500.0 30
3 7566 JONES MANAGER 7839.0 1981-04-02 2975 NaN 20
4 7654 MARTIN SALESMAN 7698.0 1981-09-28 1250 1400.0 30
5 7698 BLAKE MANAGER 7839.0 1981-05-01 2850 NaN 30
6 7782 CLARK MANAGER 7839.0 1981-06-09 2450 NaN 10
7 7788 SCOTT ANALYST 7566.0 1987-04-19 3000 NaN 20
8 7839 KING PRESIDENT NaN 1981-11-17 5000 NaN 10
9 7844 TURNER SALESMAN 7698.0 1981-09-08 1500 0.0 30
10 7876 ADAMS CLERK 7788.0 1987-05-23 1100 NaN 20
11 7900 JAMES CLERK 7698.0 1981-12-03 950 NaN 30
12 7902 FORD ANALYST 7566.0 1981-12-03 3000 NaN 20
13 7934 MILLER CLERK 7782.0 1982-01-23 1300 NaN 10
SELECT
在 SQL 中,SELECT 查詢語(yǔ)句使用,
把要查詢的每個(gè)字段分開(kāi),當(dāng)然您也可以使用*
來(lái)選擇所有的字段。如下所示:
SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO FROM emp LIMIT 5;
對(duì)于 Pandas 而言,要完成 SELECT 查詢,需要把數(shù)據(jù)集每一列(columns)的名稱傳遞給 DataFrame 對(duì)象。如下所示:
df[['EMPNO','ENAME','JOB','MGR','HIREDATE','SAL','COMM' , 'DEPTNO']].head(5)
下面代碼是 Pandas 執(zhí)行 SELECT 查詢的完整程序:
import pandas as pd df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx") emp = df[['EMPNO','ENAME','JOB','MGR','HIREDATE','SAL','COMM' , 'DEPTNO']].head(5) print(emp)
輸出結(jié)果如下:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
0 7369 SMITH CLERK 7902.0 1980-12-17 800 NaN 20
1 7499 ALLEN SALESMAN 7698.0 1981-02-20 1600 300.0 30
2 7521 WARD SALESMAN 7698.0 1981-02-22 1250 500.0 30
3 7566 JONES MANAGER 7839.0 1981-04-02 2975 NaN 20
4 7654 MARTIN SALESMAN 7698.0 1981-09-28 1250 1400.0 30
假如您傳入的是一個(gè)空列表, 那最終結(jié)果將輸出所有的行索引標(biāo)簽。
WHERE
SQL 中的條件查詢是通過(guò) WHERE 子句完成的。格式如下所示:
SELECT * FROM EMP WHERE DEPTNO = '30';
然而 DataFrame 可以通過(guò)多種方式實(shí)現(xiàn)條件篩選,最直觀的方法是通過(guò)布爾索引:
df[df['DEPTNO'] == 30]
完整程序如下:
import pandas as pd df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx") emp = df[df['DEPTNO'] == 30] print(emp)
輸出結(jié)果如下:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
1 7499 ALLEN SALESMAN 7698.0 1981-02-20 1600 300.0 30
2 7521 WARD SALESMAN 7698.0 1981-02-22 1250 500.0 30
4 7654 MARTIN SALESMAN 7698.0 1981-09-28 1250 1400.0 30
5 7698 BLAKE MANAGER 7839.0 1981-05-01 2850 NaN 30
9 7844 TURNER SALESMAN 7698.0 1981-09-08 1500 0.0 30
11 7900 JAMES CLERK 7698.0 1981-12-03 950 NaN 30
上面的語(yǔ)句通過(guò)布爾運(yùn)算將 True 或 False 對(duì)象傳遞給 DataFrame 對(duì)象,然后返回所有為 True 的行。
GroupBy
在 SQL 語(yǔ)句中,通過(guò) GroupBy 操作可以獲取 table 中一組記錄的計(jì)數(shù)。示例如下:
SELECT id, count(*) FROM EMP GROUP BY DEPTNO;
而 Pandas 可通過(guò)以下代碼實(shí)現(xiàn):
df.groupby('DEPTNO').size()
完整的程序如下所示:
import pandas as pd import numpy as np df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx") emp_count = df.groupby('DEPTNO').size() # 或者使用agg或aggregate函數(shù) # emp_count = df.groupby('DEPTNO').aggregate({'EMPNO':np.size,'SAL':np.mean}) print(emp_count)
輸出結(jié)果:
DEPTNO
10 3
20 5
30 6
dtype: int64
LIMIT
在 SQL 中,LIMIT 語(yǔ)句主要起到限制作用,比如查詢前 n 行記錄:
SELECT * FROM EMP LIMIT n;
而在 Pandas 中,您可以通過(guò) head() 來(lái)實(shí)現(xiàn)(默認(rèn)前 5 行),示例如下:
import pandas as pd df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx") emp = df[['EMPNO','ENAME','JOB','MGR','HIREDATE','SAL','COMM' , 'DEPTNO']].head(5) print(emp)
輸出結(jié)果:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
0 7369 SMITH CLERK 7902.0 1980-12-17 800 NaN 20
1 7499 ALLEN SALESMAN 7698.0 1981-02-20 1600 300.0 30
2 7521 WARD SALESMAN 7698.0 1981-02-22 1250 500.0 30
3 7566 JONES MANAGER 7839.0 1981-04-02 2975 NaN 20
4 7654 MARTIN SALESMAN 7698.0 1981-09-28 1250 1400.0 30
到此這篇關(guān)于Pandas執(zhí)行SQL操作的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Pandas執(zhí)行SQL操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyTorch使用GPU訓(xùn)練的兩種方法實(shí)例
pytorch是一個(gè)非常優(yōu)秀的深度學(xué)習(xí)的框架,具有速度快,代碼簡(jiǎn)潔,可讀性強(qiáng)的優(yōu)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于PyTorch使用GPU訓(xùn)練的兩種方法,需要的朋友可以參考下2022-05-05python中print的不換行即時(shí)輸出的快速解決方法
下面小編就為大家?guī)?lái)一篇python中print的不換行即時(shí)輸出的快速解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考2016-07-07一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖
一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖,本文涵蓋了Python編程的核心知識(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10python獲取一組數(shù)據(jù)里最大值max函數(shù)用法實(shí)例
這篇文章主要介紹了python獲取一組數(shù)據(jù)里最大值max函數(shù)用法,實(shí)例分析了max函數(shù)的使用技巧,需要的朋友可以參考下2015-05-05Python for循環(huán)通過(guò)序列索引迭代過(guò)程解析
這篇文章主要介紹了Python for循環(huán)通過(guò)序列索引迭代過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02python使用paramiko執(zhí)行服務(wù)器腳本并拿到實(shí)時(shí)結(jié)果
這篇文章主要介紹了python使用paramiko執(zhí)行服務(wù)器腳本并拿到實(shí)時(shí)結(jié)果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12