簡介
在這篇文章中,我將向您展示如何使用 Pandas 通過 SQL 樣式過濾來執行數據分析。大多數企業數據都存儲在需要 SQL 來檢索和操作的數據庫中。例如,像 Oracle、IBM、Microsoft 這樣的公司擁有自己的數據庫和自己的 SQL 實現。
數據科學家必須在其職業生涯的某個階段處理 SQL,因為數據并不總是存儲在CSV 文件。我個人更喜歡使用 Oracle,因為我公司的大部分數據都存儲在 Oracle 中。
場景 – 1 假設我們有一個任務,從我們的電影中查找所有電影具有以下條件的數據集。
- 電影的語言應該是英語(en)或西班牙語(es)。電影的受歡迎程度必須介于 500 到 1000 之間。電影的狀態必須已發布。投票數必須大于 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;
登錄后復制
現在你已經看到了滿足需求的SQL語句,讓我們使用pandas一步一步地進行操作。我將向你展示兩種方法。
方法1:布爾索引
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 |
---|---|---|---|---|
95星際 | zh | 已發布 | 724.247784 | 10867 |
788死侍 | zh | 已發布 | 514.569956 | 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" )
登錄后復制
4.構建查詢字符串并執行該方法。
請注意,.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 | 2014年5月11日 | 675120017 | 169.0 | 關系 |
788 | 58000000 | 293660 | zh | 死侍 | 514.569956 | 2016年9月2日 | 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 | 157336 | zh | 星際 | 724.247784 | 2014年5月11日 | 675120017 | 169.0 | 關系 |
788 | 58000000 | zh | 死侍 | 514.569956 p> | 2016年9月2日 | 783112979 | 108.0 | 關系 |
以上就是如何在 Pandas 的 SQL 查詢樣式中選擇數據子集?的詳細內容,更多請關注www.92cms.cn其它相關文章!