在這篇文章中,我將向您展示如何使用 Pandas 透過 SQL 樣式過濾來執行資料分析。大多數企業資料都儲存在需要 SQL 來檢索和操作的資料庫中。例如,像 Oracle、IBM、Microsoft 這樣的公司擁有自己的資料庫和自己的 SQL 實作。
資料科學家必須在其職業生涯的某個階段處理 SQL,因為資料並不總是儲存在CSV 檔案。我個人更喜歡使用 Oracle,因為我公司的大部分資料都儲存在 Oracle 中。
場景 – 1 假設我們有一個任務,從我們的電影中尋找所有電影具有以下條件的資料集。
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;
現在你已經看到了滿足需求的SQL語句,讓我們使用pandas一步一步地進行操作。我將向你展示兩種方法。
1. 將movies_data資料集載入到DataFrame中。
import pandas as pd movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")
為每個條件分配一個變數。
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
3.將所有條件(布林數組)組合在一起。
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 ]
#original_language | #狀態 | 受歡迎程度 | vote_count | |
---|---|---|---|---|
##vote_count | ##95星際 |
zh | 已發布 |
|
724.247784 | 10867##788死侍 | zh |
已發布 |
#10995
#方法2:- .query()方法。 .query()方法是SQL where子句樣式過濾資料的方法。條件可以作為字串傳遞給此方法,但是,列名稱不得包含任何空格。
如果列名稱中有空格,請使用 python 替換函數將其替換為底線。
根據我的經驗,我發現 query() 方法在應用於較大的 DataFrame 時比以前的方法更快。
import pandas as pd movies = pd . read_csv ( "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv" )
請注意,.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 |
id | original_language | #original_title | ||||||
---|---|---|---|---|---|---|---|---|---|
發佈日期 ’收入 |
#運行時 |
#st | 95 |
165000000 | 157336 | ||||
zh | 星際724.247784 | #675120017 | 169.0 | p>
| #關係788 |
58000000 |
##514.569956
783112979 | 108.0 | ##關係 | #還有更多,通常在我的編碼中,我有多個值要檢查我的“in”子句。所以上面的語法並不理想。可以使用 at 符號 (@) 來引用 Python 變數。 |
您也可以以程式設計方式將值建立為 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 |
|||||
---|---|---|---|---|---|---|---|---|---|
##id | original_language | #original_title | 受歡迎程度 | 發布日期 | 收入 | #運行時 | st | ||
95 | 165000000 |
zh |
#星際 |
p>##724.247784 | #2014年5月11日 | 675120017 | 169.0 | # #關係 |
以上是如何在 Pandas 的 SQL 查詢樣式中選擇資料子集?的詳細內容。更多資訊請關注PHP中文網其他相關文章!