自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL和Python的集合操作對(duì)比:適合的就好!

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
對(duì)于分析師或數(shù)據(jù)科學(xué)家而言,熟悉多種分析編程語(yǔ)言可以在當(dāng)今數(shù)據(jù)環(huán)境中贏得優(yōu)勢(shì)。在多語(yǔ)言法的主流對(duì)話中,尤其是SQL語(yǔ)言和Python語(yǔ)言,通常被描述為功能性離散。

[[267199]]

 對(duì)于分析師或數(shù)據(jù)科學(xué)家而言,熟悉多種分析編程語(yǔ)言可以在當(dāng)今數(shù)據(jù)環(huán)境中贏得優(yōu)勢(shì)。在多語(yǔ)言法的主流對(duì)話中,尤其是SQL語(yǔ)言和Python語(yǔ)言,通常被描述為功能性離散。

SQL和Python都可以實(shí)現(xiàn)許多功能。探索兩種編程語(yǔ)言重疊的功能可以幫助只熟悉一種編程語(yǔ)言的人更加熟悉另一種編程語(yǔ)言。組合和利用每種編程語(yǔ)言,可以對(duì)其做出更明智的決策,并更好地為每個(gè)任務(wù)選擇合適的工具。了解如何在SQL或Python中完成任務(wù)將幫助你選擇出***的工作工具。

集合操作

分析式問(wèn)題通常需要檢查多個(gè)不同的數(shù)據(jù)集。在解答過(guò)程中,通過(guò)比較或組合不同的數(shù)據(jù)集來(lái)創(chuàng)建一組新數(shù)據(jù)集,非常有效。

例如,你可能有兩個(gè)單獨(dú)的表,其中包含要轉(zhuǎn)換為單個(gè)事務(wù)表的事務(wù)性數(shù)據(jù),你想把它們合并為一個(gè)表,或者創(chuàng)建一個(gè)同時(shí)包含兩個(gè)表中數(shù)據(jù)的新事務(wù)表。

在SQL中,集合操作符可以解決這個(gè)問(wèn)題。集合操作符支持對(duì)比性操作,可以有條件地連結(jié)兩個(gè)SQL語(yǔ)句的結(jié)果集。SQL集合操作符包括:

  • UNION:從待比較的兩個(gè)查詢語(yǔ)句返回結(jié)果行。在默認(rèn)情況下,如果兩個(gè)SQL語(yǔ)句的結(jié)果集中存在相同的行,則UNION不會(huì)返回重復(fù)行。如果你想返回重復(fù)行,可以向集合操作符UNION提供可選ALL關(guān)鍵字。
  • INTERSECT:返回位于兩個(gè)待比較的查詢語(yǔ)句結(jié)果集中的行。
  • EXCEPT(或者M(jìn)INUS):返回到非待比較的查詢語(yǔ)句結(jié)果集中的行。

雖然Python中沒(méi)有特定的集合操作符種類,但Python中仍然有各種各樣的函數(shù)可以實(shí)現(xiàn)這些功能。

為了說(shuō)明如何在實(shí)踐中使用這些集合操作,先假設(shè)你作為一名雙邊市場(chǎng)數(shù)據(jù)科學(xué)家。在你的市場(chǎng)中有買家和賣家,二者并不相互排斥?,F(xiàn)在,買賣雙方分別存在于buyers和sellers表格的數(shù)據(jù)庫(kù)中。讓我們來(lái)瀏覽一下集合操作可能發(fā)揮作用的幾種場(chǎng)景。

合并和合并所有

假設(shè)你想把存在于buyers和sellers表格中的所有用戶合并到一個(gè)新的單獨(dú)的“用戶”表格中。

在SQL中,你可以使用UNION操作符和可選ALL關(guān)鍵字來(lái)實(shí)現(xiàn):

  1. -- SQL
  2. select user_id  
  3. from modeanalytics.buyers  
  4. union all  
  5. select user_id  
  6. from modeanalytics.sellers 

在Python中,可以使用pandas .concat()函數(shù)復(fù)制上面執(zhí)行的UNION ALL集合操作。

pandas .concat()方法沿著選定的軸連接pandas對(duì)象(例如Dataframes,Series等)。假設(shè)您已將buyers和sellers數(shù)據(jù)庫(kù)表格中user_id字段存儲(chǔ)在兩個(gè)pandas數(shù)據(jù)框?qū)ο笾?buyers 和 sellers),你可以使用以下Python代碼復(fù)制上面執(zhí)行過(guò)的UNION ALL集合操作:

  1. # Python 
  2. users = pd.concat([buyers, sellers]) 

需要注意的是,在SQL中使用UNION和ALL關(guān)鍵字,或者在Python中使用pandas concat()方法,你將把存在于兩個(gè)表格中的用戶(用戶即是買家又是賣家)返回到重復(fù)行。但是,如果你只想返回存在于兩個(gè)表中的一個(gè)用戶的單一實(shí)例時(shí):

在SQL中,從UNION集合操作符中移除ALL關(guān)鍵字:

  1. -- SQL
  2. select user_id  
  3. from modeanalytics.buyers  
  4. union  
  5. select user_id  
  6. from modeanalytics.sellers 

在Python中,將.drop_duplicates()方法鏈接在連接pandas對(duì)象上:

  1. # Python 
  2. users = pd.concat([buyers, sellers]).drop_duplicates() 

交集

反之,如果你想創(chuàng)建一個(gè)既是買家又是賣家的獨(dú)立用戶表格呢?

在SQL中,你可以使用INTERSECT集合操作符:

  1. -- SQL
  2. select user_id  
  3. from modeanalytics.buyers  
  4. intersect  
  5. select user_id  
  6. from modeanalytics.sellers 

在Python中,你可以在數(shù)據(jù)框中使用pandas .merge()方法:

  1. Python 
  2. buyers_and_sellers = buyers.merge(sellers) 

默認(rèn)情況下,pandas .merge()方法將嘗試將兩個(gè)數(shù)據(jù)框中的所有列進(jìn)行“內(nèi)部”合并。此默認(rèn)操作基本復(fù)制了SQL集合操作符INTERSECT的步驟。

差集

現(xiàn)在,如果你想返回到所有買家用戶,而不是賣家用戶。

在SQL中,你可以使用EXCEPT集合操作:

  1. -- SQL 
  2. select user_id 
  3. from modeanalytics.buyers 
  4. except 
  5. select user_id 
  6. from modeanalytics.sellers 

值得注意的是,SQL的EXCEPT集合操作符只能返回到***個(gè)表格,不能返回到第二個(gè)表格。如果你想要返回到賣方的表格中,你需要顛倒SELECT語(yǔ)句的順序:

  1. -- SQL 
  2. select user_id 
  3. from modeanalytics.sellers 
  4. except 
  5. select user_id 
  6. from modeanalytics.buyers 

在Python中,利用pandas布爾索引技術(shù)和pandas .isin() 索引來(lái)復(fù)制SQL EXCEPT集合操作符的功能:

  1. # Python  
  2. buyers_not_sellers = buyers[buyers.user_id.isin(sellers.user_id) == False 
  3. sellers_not_buyers = sellers[sellers.user_id.isin(buyers.user_id) == False]` 

模糊界限

到這里,你已經(jīng)了解了如何在Python中復(fù)制大量SQL集合操作符的功能。最終,編程模式的選擇取決于你,甚至可以在項(xiàng)目基礎(chǔ)上逐個(gè)改動(dòng)。只有通過(guò)掌握分析語(yǔ)言功能上的重疊,才能有效做出決策。這就是使用多種數(shù)據(jù)分析語(yǔ)言的好處:你可以自定義一個(gè)混合方法來(lái)滿足你不斷發(fā)展的需求。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-04-09 23:00:12

SQL數(shù)據(jù)庫(kù)Pandas

2022-07-20 12:24:38

Python列表集合

2011-08-25 14:10:00

SQL ServerDB2修改數(shù)據(jù)表列

2020-10-16 11:53:52

數(shù)據(jù)分析PythonSQL

2011-03-03 09:43:53

Visual Stud

2024-09-12 17:05:13

2024-11-11 07:00:00

Python編程

2014-06-19 10:48:18

RubyPython

2024-04-18 09:16:03

EnumeratePythonFor循環(huán)

2020-07-03 18:14:20

JavaScript開發(fā)技術(shù)

2017-11-14 18:54:43

MySQLMongoDBNoSQL

2010-10-09 10:39:49

2023-10-11 11:24:08

SQL和PythonPython

2025-01-03 17:10:54

2017-03-14 14:38:21

數(shù)據(jù)庫(kù)SQL語(yǔ)句集合運(yùn)算

2021-08-19 10:30:13

Java集合排序程序開發(fā)

2013-03-15 15:04:41

vSphere備份VDP

2013-08-20 13:22:35

PythonGo編程語(yǔ)言

2011-03-23 17:11:21

Lampwamp

2020-09-30 14:24:58

PythonSet對(duì)象
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)