当前位置: 首页 > 科技观察

SQL与Python集合操作对比:恰到好处!

时间:2023-03-12 04:49:01 科技观察

对于分析师或数据科学家来说,熟悉多种分析编程语言可以让他们在当今的数据环境中占据优势。在多语言法的主流对话中,SQL语言,尤其是Python语言通常被描述为功能离散的。SQL和Python都可以实现很多功能。探索两种编程语言的重叠特性,可以帮助只熟悉一种编程语言的人更加熟悉另一种编程语言。结合和利用每种编程语言可以做出更明智的决策,并更好地为每项任务选择正确的工具。了解如何使用SQL或Python完成工作将有助于您选择最适合工作的工具。集合操作分析问题通常需要检查许多不同的数据集。在求解过程中,通过比较或组合不同的数据集来创建一组新的数据集是非常有效的。例如,您可能有两个单独的表,其中包含要转换为单个事务表的事务数据,并且您想要将它们合并到一个表中,或者创建一个包含来自两个表的数据的新事务表。在SQL中,集合运算符可以解决这个问题。集合运算符支持比较运算,可以有条件地连接两条SQL语句的结果集。SQL集合运算符包括:UNION:返回要比较的两个查询语句的结果行。默认情况下,如果两条SQL语句的结果集中存在同一行,UNION不会返回重复的行。如果要返回重复行,可以为集合运算符UNION提供可选的ALL关键字。INTERSECT:返回要比较的两条查询语句的结果集中的行。EXCEPT(或MINUS):返回不在要比较的查询语句的结果集中的行。虽然Python中没有特定种类的集合运算符,但是Python中仍然有各种各样的函数可以实现这些功能。为了说明如何在实践中使用这些集合运算,假设您是双向市场数据科学家。在您的市场中有买家和卖家,两者并不相互排斥。现在,买家和卖家分别存在于数据库的买家和卖家表中。让我们来看看集合操作可能发挥作用的几个场景。Merge和MergeAll假设您要将存在于买家和卖家表中的所有用户合并到一个新的“用户”表中。在SQL中,您可以使用UNION运算符和可选的ALL关键字来实现此目的:--SQLselectuser_idfrommodeanalytics.buyersunionallselectuser_idfrommodeanalytics.sellers在Python中,可以使用pandas.concat()函数复制上面执行的UNIONALL集合操作。pandas.concat()方法沿选定的轴连接pandas对象(例如Dataframes、Series等)。假设您已将user_id字段存储在两个pandas数据框对象(买家和卖家)的买家和卖家数据库表中,您可以使用以下Python代码复制上面执行的UNIONALL集合操作:#Pythonusers=pd.concat([buyers,sellers])请注意,使用SQL中的UNION和ALL关键字,或Python中的pandasconcat()方法,您将合并存在于两个表中的用户(用户是买家并且是卖家)返回到重复行。但是,如果您只想返回存在于两个表中的用户的单个实例:在SQL中,从UNION集合运算符中删除ALL关键字:--SQLselectuser_idfrommodeanalytics.buyersunionselectuser_idfrommodeanalytics.sellers在Python中,.drop_duplicates()方法链接在串联的pandas对象上:#Pythonusers=pd.concat([buyers,sellers]).drop_duplicates()intersection相反,如果你想创建一个单独的用户表,既是买家又是卖家怎么办?在SQLPython中,您可以使用INTERSECT集合运算符:--SQLselectuser_idfrommodeanalytics.buyersintersectselectuser_idfrommodeanalytics.sellers在Python中,您可以对数据框使用pandas.merge()方法:Pythonbuyers_and_sellers=buyers.merge(sellers)默认情况下,pandas.merge()方法将尝试对两个数据框中的所有列进行“内部”合并。这个默认操作基本上复制了SQL集合运算符INTERSECT的步骤。区别现在,如果要返回给所有买家用户,而不是卖家用户。SQL中可以使用EXCEPT集合操作:--SQLselectuser_idfrommodeanalytics.buyersexceptselectuser_idfrommodeanalytics.sellers值得注意的是,SQLEXCEPT集合操作只能返回第一张表,不能返回第二张表。如果要返回sellers表,需要将SELECT语句的顺序倒过来:--SQLselectuser_idfrommodeanalytics.sellersexceptselectuser_idfrommodeanalytics.buyers在Python中,使用pandas布尔索引技术和pandas.isin()索引来复制SQLEXCEPTsetoperatorFunction:#Pythonbuyers_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集合运算符的功能。最终,编程模型的选择取决于您,甚至可以在逐个项目的基础上进行更改。只有掌握分析语言功能的重叠,才能做出有效的决策。这就是使用多种数据分析语言的好处:您可以自定义混合方法来满足您不断变化的需求。