簡介
在這篇文章中,我將向您展示如何使用 Pandas 通過 SQL 樣式過濾來執(zhí)行數(shù)據(jù)分析。大多數(shù)企業(yè)數(shù)據(jù)都存儲在需要 SQL 來檢索和操作的數(shù)據(jù)庫中。例如,像 Oracle、IBM、Microsoft 這樣的公司擁有自己的數(shù)據(jù)庫和自己的 SQL 實(shí)現(xiàn)。
數(shù)據(jù)科學(xué)家必須在其職業(yè)生涯的某個階段處理 SQL,因?yàn)閿?shù)據(jù)并不總是存儲在CSV 文件。我個人更喜歡使用 Oracle,因?yàn)槲夜镜拇蟛糠謹(jǐn)?shù)據(jù)都存儲在 Oracle 中。
場景 – 1 假設(shè)我們有一個任務(wù),從我們的電影中查找所有電影具有以下條件的數(shù)據(jù)集。
- 電影的語言應(yīng)該是英語(en)或西班牙語(es)。電影的受歡迎程度必須介于 500 到 1000 之間。電影的狀態(tài)必須已發(fā)布。投票數(shù)必須大于 5000。對于上述場景,SQL 語句類似于如下。
SELECT
FROM WHERE
title AS movie_title
,original_language AS movie_language
,popularityAS movie_popularity
,statusAS movie_status
,vote_count AS movie_vote_count movies_data
original_languageIN ('en', 'es')
AND status=('Released')
AND popularitybetween 500 AND 1000
AND vote_count > 5000;
登錄后復(fù)制
現(xiàn)在你已經(jīng)看到了滿足需求的SQL語句,讓我們使用pandas一步一步地進(jìn)行操作。我將向你展示兩種方法。
方法1:布爾索引
1. 將movies_data數(shù)據(jù)集加載到DataFrame中。
import pandas as pd movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")
登錄后復(fù)制
為每個條件分配一個變量。
languages = [ "en" , "es" ] condition_on_languages = movies . original_language . isin ( languages ) condition_on_status = movies . status == "Released" condition_on_popularity = movies . popularity . between ( 500 , 1000 ) condition_on_votecount = movies . vote_count > 5000
登錄后復(fù)制
3.將所有條件(布爾數(shù)組)組合在一起。
final_conditions = ( condition_on_languages & condition_on_status & condition_on_popularity & condition_on_votecount ) columns = [ "title" , "original_language" , "status" , "popularity" , "vote_count" ] # clubbing all together movies . loc [ final_conditions , columns ]
登錄后復(fù)制
| 標(biāo)題 | original_language | 狀態(tài) | 受歡迎程度 | vote_count |
|---|---|---|---|---|
| 95星際 | zh | 已發(fā)布 | 724.247784 | 10867 |
| 788死侍 | zh | 已發(fā)布 | 514.569956 | 10995 |
方法2:- .query()方法。
.query()方法是SQL where子句樣式過濾數(shù)據(jù)的方法。條件可以作為字符串傳遞給此方法,但是,列名稱不得包含任何空格。
如果列名稱中有空格,請使用 python 替換函數(shù)將其替換為下劃線。
根據(jù)我的經(jīng)驗(yàn),我發(fā)現(xiàn) query() 方法在應(yīng)用于較大的 DataFrame 時比以前的方法更快。
import pandas as pd movies = pd . read_csv ( "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv" )
登錄后復(fù)制
4.構(gòu)建查詢字符串并執(zhí)行該方法。
請注意,.query 方法不適用于跨越多行的三重引號字符串。
final_conditions = ( "original_language in ['en','es']" "and status == 'Released' " "and popularity > 500 " "and popularity < 1000" "and vote_count > 5000" ) final_result = movies . query ( final_conditions ) final_result
登錄后復(fù)制
| 預(yù)算 | id | original_language | original_title | 受歡迎程度 | 發(fā)布日期 | 收入 | 運(yùn)行時 | st | |
|---|---|---|---|---|---|---|---|---|---|
| 95 | 165000000 | 157336 | zh | 星際 | 724.247784 | 2014年5月11日 | 675120017 | 169.0 | 關(guān)系 |
| 788 | 58000000 | 293660 | zh | 死侍 | 514.569956 | 2016年9月2日 | 783112979 | 108.0 | 關(guān)系 |
還有更多,通常在我的編碼中,我有多個值要檢查我的“in”子句。所以上面的語法并不理想。可以使用 at 符號 (@) 引用 Python 變量。
您還可以以編程方式將值創(chuàng)建為 Python 列表,并將它們與 (@) 一起使用。
movie_languages = [ 'en' , 'es' ] final_conditions = ( "original_language in @movie_languages " "and status == 'Released' " "and popularity > 500 " "and popularity < 1000" "and vote_count > 5000" ) final_result = movies . query ( final_conditions ) final_result
登錄后復(fù)制
| 預(yù)算 | id | original_language | original_title | 受歡迎程度 | 發(fā)布日期 | 收入 | 運(yùn)行時 | st | |
|---|---|---|---|---|---|---|---|---|---|
| 95 | 165000000 | 157336 | zh | 星際 | 724.247784 | 2014年5月11日 | 675120017 | 169.0 | 關(guān)系 |
| 788 | 58000000 | zh | 死侍 | 514.569956 p> | 2016年9月2日 | 783112979 | 108.0 | 關(guān)系 |
以上就是如何在 Pandas 的 SQL 查詢樣式中選擇數(shù)據(jù)子集?的詳細(xì)內(nèi)容,更多請關(guān)注www.92cms.cn其它相關(guān)文章!






