我們知道,使用 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
在 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)簽。
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 的行。
在 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
在 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 做了簡單講解,希望對您有所幫助。
更多建議: