加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

SQL和Python的集合操作对比:适合的就是最好的!

发布时间:2019-06-07 09:51:30 所属栏目:编程 来源:读芯术
导读:对付说明师或数据科学家而言,认识多种说明编程说话可以在当今数据情形中赢得上风。在多说话法的主流对话中,尤其是SQL说话和Python说话,凡是被描写为成果性离散。 SQL和Python都可以实现很多成果。试探两种编程说话重叠的成果可以辅佐只认识一种编程说话
副问题[/!--empirenews.page--]

SQL和Python的荟萃操纵比拟:得当的就是最好的!

对付说明师或数据科学家而言,认识多种说明编程说话可以在当今数据情形中赢得上风。在多说话法的主流对话中,尤其是SQL说话和Python说话,凡是被描写为成果性离散。

SQL和Python都可以实现很多成果。试探两种编程说话重叠的成果可以辅佐只认识一种编程说话的人越发认识另一种编程说话。组合和操作每种编程说话,可以对其做出更明智的决定,并更好地为每个使命选择吻合的器材。相识如安在SQL或Python中完成使命将辅佐你选择出最佳的事变器材。

荟萃操纵

说明式题目凡是必要搜查多个差异的数据集。在解答进程中,通过较量或组合差异的数据集来建设一组新数据集,很是有用。

譬喻,你也许有两个单独的表,个中包括要转换为单个事宜表的事宜性数据,你想把它们归并为一个表,可能建设一个同时包括两个表中数据的新事宜表。

在SQL中,荟萃操纵符可以办理这个题目。荟萃操纵符支持比拟性操纵,可以有前提地连结两个SQL语句的功效集。SQL荟萃操纵符包罗:

  • UNION:从待较量的两个查询语句返回功效行。在默认环境下,假如两个SQL语句的功效齐集存在沟通的行,则UNION不会返回一再行。假如你想返回一再行,可以向荟萃操纵符UNION提供可选ALL要害字。
  • INTERSECT:返回位于两个待较量的查询语句功效齐集的行。
  • EXCEPT(可能MINUS):返回到非待较量的查询语句功效齐集的行。

固然Python中没有特定的荟萃操纵符种类,但Python中如故有各类百般的函数可以实现这些成果。

为了声名如安在实践中行使这些荟萃操纵,先假设你作为一名双边市场数据科学家。在你的市场中有买家和卖家,二者并不彼此排出。此刻,交易两边别离存在于buyers和sellers表格的数据库中。让我们来赏识一下荟萃操纵也许施展浸染的几种场景。

归并和归并全部

假设你想把存在于buyers和sellers表格中的全部用户归并到一个新的单独的“用户”表格中。

在SQL中,你可以行使UNION操纵符和可选ALL要害字来实现:

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

在Python中,可以行使pandas .concat()函数复制上面执行的UNION ALL荟萃操纵。

pandas .concat()要领沿着选定的轴毗连pandas工具(譬喻Dataframes,Series等)。假设您已将buyers和sellers数据库表格中user_id字段存储在两个pandas数据框工具中(buyers 和 sellers),你可以行使以下Python代码复制上面执行过的UNION ALL荟萃操纵:

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

必要留意的是,在SQL中行使UNION和ALL要害字,可能在Python中行使pandas concat()要领,你将把存在于两个表格中的用户(用户等于买家又是卖家)返回到一再行。可是,假如你只想返回存在于两个表中的一个用户的单一实例时:

在SQL中,从UNION荟萃操纵符中移除ALL要害字:

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

在Python中,将.drop_duplicates()要领链接在毗连pandas工具上:

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

交集

反之,假如你想建设一个既是买家又是卖家的独立用户表格呢?

在SQL中,你可以行使INTERSECT荟萃操纵符:

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

在Python中,你可以在数据框中行使pandas .merge()要领:

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

默认环境下,pandas .merge()要领将实行将两个数据框中的全部罗列办“内部”归并。此默认操纵根基复制了SQL荟萃操纵符INTERSECT的步调。

差集

此刻,假如你想返回到全部买家用户,而不是卖家用户。

在SQL中,你可以行使EXCEPT荟萃操纵:

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

值得留意的是,SQL的EXCEPT荟萃操纵符只能返回到第一个表格,不能返回到第二个表格。假如你想要返回到卖方的表格中,你必要颠倒SELECT语句的次序:

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

在Python中,操作pandas布尔索引技能和pandas .isin() 索引来复制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]` 

恍惚边界

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读