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

点击上方 "程序员小乐"关注, 星标或置顶一起成长

每天凌晨00点00分, 第一时间与你相约

每日英文

Be true to who you are. Stop trying to please other people or be someone else. It’s better to be an original version of yourself than an exact duplicate of someone else.

做真实的自己,不要为了取悦别人或试图成为某个人。做你最原始的自己,比做任何人的复制品都来得好。

每日掏心

大多数人的压力,来自于不假思索跟着大部队走。大部队说,要先有钱才能有面子,于是终日焦虑财富不够,忘了品味生活。

来自:读芯术 | 责编:乐乐

程序员小乐(ID:study_tech)第 752 次推文   图片来自 Pexels

往日回顾:重磅!美国对巴西发出警告:敢用华为就降低安全级别,巴西霸气回应!

   正文   

对于分析师或数据科学家而言,熟悉多种分析编程语言可以在当今数据环境中赢得优势。在多语言法的主流对话中,尤其是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关键字来实现:

-- SQL

select user_id

from modeanalytics.buyers

union all

select user_id

from modeanalytics.sellers

在Python中,可以使用pandas .concat()函数复制上面执行的UNION ALL集合操作。

pandas .concat()方法沿着选定的轴连接pandas对象(例如Dataframes,Series等)。假设您已将buyers和sellers数据库表格中user_id字段存储在两个pandas数据框对象中(buyers 和 sellers),你可以使用以下Python代码复制上面执行过的UNION ALL集合操作:

# Python

users = pd.concat([buyers, sellers])

需要注意的是,在SQL中使用UNION和ALL关键字,或者在Python中使用pandas concat()方法,你将把存在于两个表格中的用户(用户即是买家又是卖家)返回到重复行。但是,如果你只想返回存在于两个表中的一个用户的单一实例时:

在SQL中,从UNION集合操作符中移除ALL关键字:

-- SQL

select user_id

from modeanalytics.buyers

union

select user_id

from modeanalytics.sellers

在Python中,将.drop_duplicates()方法链接在连接pandas对象上:

# Python

users = pd.concat([buyers, sellers]).drop_duplicates()

交集

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

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

-- SQL

select user_id

from modeanalytics.buyers

intersect

select user_id

from modeanalytics.sellers

在Python中,你可以在数据框中使用pandas .merge()方法:

Python

buyers_and_sellers = buyers.merge(sellers)

默认情况下,pandas .merge()方法将尝试将两个数据框中的所有列进行“内部”合并。此默认操作基本复制了SQL集合操作符INTERSECT的步骤。

现在,如果你想返回到所有买家用户,而不是卖家用户。

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

-- SQL

select user_id

from modeanalytics.buyers

except

select user_id

from modeanalytics.sellers

值得注意的是,SQL的EXCEPT集合操作符只能返回到第一个表格,不能返回到第二个表格。如果你想要返回到卖方的表格中,你需要颠倒SELECT语句的顺序:

-- SQL

select user_id

from modeanalytics.sellers

except

select user_id

from modeanalytics.buyers

在Python中,利用pandas布尔索引技术和pandas .isin() 索引来复制SQL EXCEPT集合操作符的功能:

# Python

buyers_not_sellers = buyers[buyers.user_id.isin(sellers.user_id) == False]

sellers_not_buyers = sellers[sellers.user_id.isin(buyers.user_id) == False]`

模糊界限

到这里,你已经了解了如何在Python中复制大量SQL集合操作符的功能。最终,编程模式的选择取决于你,甚至可以在项目基础上逐个改动。只有通过掌握分析语言功能上的重叠,才能有效做出决策。这就是使用多种数据分析语言的好处:你可以自定义一个混合方法来满足你不断发展的需求。

欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。

欢迎各位读者加入程序员小乐技术群,在公众号后台回复“加群”或者“学习”即可。

猜你还想看

阿里、腾讯、百度、华为、京东最新面试题汇集

Java中关于try、catch、finally中的细节分析,看了都说好!

IDEA热部署之JRebel的安装与破解教程

为什么要看源码?如何看源码?高手进阶必看!

关注「程序员小乐」,收看更多精彩内容

嘿,你在看吗

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值