首頁 > 資料庫 > mysql教程 > 如何在 Pandas 的 SQL 查詢樣式中選擇資料子集?

如何在 Pandas 的 SQL 查詢樣式中選擇資料子集?

WBOY
發布: 2023-08-31 10:13:10
轉載
1178 人瀏覽過

如何在 Pandas 的 SQL 查询样式中选择数据子集?

簡介

在這篇文章中,我將向您展示如何使用 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 ]
登入後複製

zh10867

#original_language

#狀態

受歡迎程度

vote_count

< p>
##vote_count

##95星際

< /td>已發布

724.247784

##788死侍

zh

已發布

#514.569956

#10995

< /p>

#方法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.建立查詢字串並執行該方法。 ## 受歡迎程度165000000157336星際724.247784< td>

2014年5月11日

#675120017169.0#關係58000000
請注意,.query 方法不適用於跨越多行的三重引號字串。

final_conditions = (
"original_language in [&#39;en&#39;,&#39;es&#39;]"
"and status == &#39;Released&#39; "
"and popularity > 500 "
"and popularity < 1000"
"and vote_count > 5000"
) final_result = movies . query ( final_conditions )
final_result
登入後複製
< /p>

id

original_language

#original_title

發佈日期

’收入

#運行時

#st

< /p>

95

zh

788

#293660

zh< p>

#死侍

##514.569956

2016年9月2日783112979108.0 ##關係

#157336

###788################58000000################### ##293660############zh#############死侍############514.569956######## #####2016年9月2日############783112979############108.0#############關係#####################

以上是如何在 Pandas 的 SQL 查詢樣式中選擇資料子集?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板

< /p>

#還有更多,通常在我的編碼中,我有多個值要檢查我的“in”子句。所以上面的語法並不理想。可以使用 at 符號 (@) 來引用 Python 變數。

您也可以以程式設計方式將值建立為 Python 列表,並將它們與 (@) 一起使用。

movie_languages = [ &#39;en&#39; , &#39;es&#39; ]
final_conditions = (
"original_language in @movie_languages "
"and status == &#39;Released&#39; "
"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

# #關係