真正的第一个问题是,为什么人们比单纯的SQL抽象更能使用DataFrame抽象。
TLDR;SQL不适合(人)开发和调试过程,而DataFrames则适合。
主要原因是,DataFrame抽象允许您构造SQL语句,同时避免冗长且难以理解的嵌套。编写嵌套例程,将其注释掉以进行检查然后取消注释的模式将由单行转换代替。您可以自然地在一个repl中逐行运行内容(甚至在Spark中)并查看结果。
请考虑以下示例:向表中添加一个新的转换后的(字符串错列的列),然后对其进行分组并进行一些聚合。SQL变得非常丑陋。熊猫可以解决此问题,但在涉及真正的大数据或特定分区(也许最近有所改进)时会丢失一些东西。
DataFrames应该被视为SQL例程的高级API,即使使用熊猫它们也根本不提供给某些SQL规划人员。
-
您可能会对此进行很多技术讨论,但是我在考虑以下用户角度。
您可能会看到关于Pandas数据处理而不是SQL的更多问题的一个简单原因是,按照定义,使用SQL意味着使用数据库,而如今的许多用例仅需要一些数据来存储“一劳永逸的任务(来自.csv,Web API等)。在这些情况下,从数据库进行加载,存储,操作和提取是不可行的。
但是,考虑到用例可以使用Pandas或SQL证明其合理性的情况,您肯定是没有错的。如果您想执行许多重复的数据操作任务并保留输出,我总是建议您首先尝试通过SQL。从我所看到的原因来看,即使在这些情况下,许多用户也无法通过SQL的原因有两个方面。
首先,pandas相对于SQL的主要优势在于它是更广泛的Python领域的一部分,这意味着我可以一口气加载,清理,操作和可视化我的数据(甚至可以通过Pandas执行SQL ...)。另一个很简单,就是所有太多的用户都不知道SQL功能的范围。每个初学者都将学习SQL的“提取语法”(SELECT,FROM,WHERE等),作为将数据从DB传递到下一个位置的一种方法。有些人可能会选择一些更高级的分组和迭代语法。但是在那之后,在您寻求专家(DBA,数据工程师等)之前,知识上往往会有相当大的差距。
tl; dr:通常取决于用例,便利性或关于SQL功能范围的知识空白。