Pandas執(zhí)行SQL操作

2022-07-15 15:13 更新

我們知道,使用 SQL 語句能夠完成對 table 的增刪改查操作,Pandas 同樣也可以實(shí)現(xiàn) SQL 語句的基本功能。本節(jié)主要講解 Pandas 如何執(zhí)行 SQL 操作。

首先加載一個(gè)某連鎖咖啡廳地址分布的數(shù)據(jù)集,通過該數(shù)據(jù)集對本節(jié)內(nèi)容進(jìn)行講解。

import pandas as pd
url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
coffee_df=pd.read_excel(url)
coffee_df.head()

輸出結(jié)果如下:

   address                                    category           id                     tel
0 北京市東城區(qū)南竹竿胡同2號1幢2層30212號銀河SOHOC座  娛樂休閑:咖啡廳  1874263549184796345   010-85179080
1 北京市東城區(qū)東直門內(nèi)大街277-31號檔口              娛樂休閑:咖啡廳  1461638360847848424   400-669-2002
2 北京市東城區(qū)王府井東街8號澳門中心L117商場102室      娛樂休閑:咖啡廳  1308505235389562852   400-010-0100
3 北京市東城區(qū)前門大街108號底商                    娛樂休閑:咖啡廳   15442844740539053384
4 北京市東城區(qū)和平里西街51號雍和宮壹中心A座負(fù)一層     娛樂休閑:咖啡廳    2357391864111641256  4000100100

SELECT

在 SQL 中,SELECT 查詢語句使用,把要查詢的每個(gè)字段分開,當(dāng)然您也可以使用*來選擇所有的字段。如下所示:

SELECT address, category, id, tel FROM tips LIMIT 5;

對于 Pandas 而言,要完成 SELECT 查詢,需要把數(shù)據(jù)集每一列(columns)的名稱傳遞給 DataFrame 對象。如下所示:

coffee_df[['address','category','id','tel']].head()

下面代碼是 Pandas 執(zhí)行 SELECT 查詢的完整程序:

import pandas as pd
url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
coffee_df=pd.read_excel(url)
#只查看尾3行
coffee_df[['address', 'category', 'id', 'tel']].tail(3)

輸出結(jié)果如下:

      address                                           category         id                    tel
28912 新疆維吾爾自治區(qū)北屯市芳園路69-2-12                 娛樂休閑:咖啡廳   7443833746160692626
28913 新疆維吾爾自治區(qū)北屯市北屯購物公園7-1-7               娛樂休閑:咖啡廳  15288143245642241877
28914 新疆維吾爾自治區(qū)可克達(dá)拉市人民西路與育才路交叉口西北50米 娛樂休閑:咖啡廳   17884214706482955

假如您傳入的是一個(gè)空列表, 那最終結(jié)果將輸出所有的行索引標(biāo)簽。

WHERE

SQL 中的條件查詢是通過 WHERE 子句完成的。格式如下所示:

SELECT * FROM coffee_df WHERE tel = '010-85179080';

然而 DataFrame 可以通過多種方式實(shí)現(xiàn)條件篩選,最直觀的方法是通過布爾索引:

coffee_df[coffee_df['id'] == '1461638360847848424']

完整程序如下:

import pandas as pd
url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
coffee_df=pd.read_excel(url)
coffee_df[coffee_df['tel'] == '400-010-0100'].head(5)

輸出結(jié)果如下:

address                                        category      id                  tel
2 北京市東城區(qū)王府井東街8號澳門中心L117商場102室      娛樂休閑:咖啡廳 1308505235389562852 400-010-0100
5 北京市東城區(qū)崇文門外大街3號崇文新世界百貨一期南門一層  娛樂休閑:咖啡廳 3294587167648650139 400-010-0100
6 北京市東城區(qū)東四北大街265號文化金融大廈1層大堂       娛樂休閑:咖啡廳 3046481700882245722 400-010-0100
7 北京市東城區(qū)珠市口東大街2號豐泰中心1層              娛樂休閑:咖啡廳 3218554253235914037 400-010-0100
9 北京市東城區(qū)怡生健身居然大廈店休閑區(qū)                娛樂休閑:咖啡廳 3141197020974020427 400-010-0100

上面的語句通過布爾運(yùn)算將 True 或 False 對象傳遞給 DataFrame 對象,然后返回所有為 True 的行。

GroupBy

在 SQL 語句中,通過 GroupBy 操作可以獲取 table 中一組記錄的計(jì)數(shù)。示例如下:

SELECT id, count(*) FROM tips GROUP BY id;

而 Pandas 可通過以下代碼實(shí)現(xiàn):

coffe_df.groupby('id').size()

完整的程序如下所示:

import pandas as pd
url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
coffee_df=pd.read_excel(url)
print(coffee_df.groupby('id').size())

輸出結(jié)果:

id
938817537566269         1
1343221331916894        1
2068013370184103        1
2147497429057385        1
4021181356852391        1
                       ..
18443951046631684378    1
18444337559943971606    1
18444494959108924300    1
18445005868173060838    1
18446259420330511125    1
Length: 23240, dtype: int64

LIMIT

在 SQL 中,LIMIT 語句主要起到限制作用,比如查詢前 n 行記錄:

SELECT * FROM coffee_df LIMIT n;

而在 Pandas 中,您可以通過 head() 來實(shí)現(xiàn)(默認(rèn)前 5 行),示例如下:

import pandas as pd
url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
coffee_df=pd.read_excel(url)
coffee_df[['address',  'tel']].head(3)

輸出結(jié)果:

  address                                       tel
0 北京市東城區(qū)南竹竿胡同2號1幢2層30212號銀河SOHOC座   010-85179080
1 北京市東城區(qū)東直門內(nèi)大街277-31號檔口               400-669-2002
2 北京市東城區(qū)王府井東街8號澳門中心L117商場102室       400-010-0100

本節(jié)主要通過對比的方式對 SQL 和 Pandas 做了簡單講解,希望對您有所幫助。 


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號