SQL操作Pandas DataFrame的三种方式示例详解

 更新时间:2023年08月30日 11:17:01   作者:新语数据故事汇  
这篇文章主要为大家介绍了SQL操作Pandas DataFrame的三种方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Pandas的DataFrame操作

假如你现在需要对Pandas的DataFrame进行如下操作:

df[df['Origin'] == 'USA']
.groupby('Origin')
.agg({
    'Miles_per_Gallon': ['sum', 'mean'],
    'Acceleration': ['min', 'max'],
}).reset_index()
df.columns=["Origin",
    "Miles_per_Gallon_sum",
    "Miles_per_Gallon_mean",
    "Acceleration_min",
    "Acceleration_max"]

而如果用SQL来书写,达到上面的处理效果,我们可以写出更优雅和更易于理解的代码:

SELECT
    Origin,
    SUM(Miles_per_Gallon) AS sum_Miles,
    AVG(Miles_per_Gallon) AS avg_Miles,
    MIN(Acceleration) AS min_Acceleration,
    MAX(Acceleration) AS max_Acceleration
FROM df
WHERE Origin = ‘USA'
GROUP BY 1

虽然我们非常喜欢Python,但很明显,对数据进行简单分析时,SQL才是我们最好的朋友,相比于Pandas的聚合函数语法,SQL语法更通俗、直观、便于理解。

接下来,本文将介绍三种使用SQL来操作Pandas DataFrame数据的方法。

假设我们已经有了一个准备好的DataFrame,其中包含你准备好的数据,下面我们开始介绍用SQL语句来查询DataFrame数据的方法。

方法1:使用DuckDB来查询DataFrame

DuckDB是一个开源的内存中的分析型数据库,专为高效处理分析工作负载而设计。它被称为SQLite的分析/OLAP等效工具,因为它提供了类似SQL的查询语言,并支持在Pandas DataFrame上执行SQL查询。

DuckDB是一个强大而灵活的分析型数据库,它的集成性和性能优势使得在Pandas中使用SQL查询变得更加便捷和高效,首先按照通常的方法进行安装:

pip install duckdb
import duckdb

DuckDB中的基准查询:

注意:我们需要明确地将结果转换为DataFrame,DuckDB会自动扫描你的内核,寻找属于DataFrame的变量,并让你像查询表一样查询它们。不过这种扫描是在查询运行时发生的,所以你不能使用如DESCRIBE这样的语句:

DuckDB对空白更难处理,反斜线不能解析,所以你需要引用表(DataFrame)的名字,然后是列名(带引号):

DuckDB是专门为OLAP使用案例而设计的数据库引擎,相较于SQLite,它提供了一些在SQLite中不存在的强大功能。一个例子是DuckDB的SAMPLE关键字,它使得对数据进行采样变得非常简单,特别适用于处理大型数据集的聚合函数。这一功能在数据分析和探索性数据分析(EDA)中非常有用。

或许,你使用DuckDB而不是SQLite来查询Pandas数据的主要原因是速度。DuckDB声称在分析性查询方面比SQLite快得多,Pandas内置的to_sql和from_sql函数在SQLite中工作得很慢,但在DuckDB中却相当快,在大数据的聚合基准查询中,速度的差异是相当大的。

方法2:使用Pandas .query()方法

你可能已经熟悉了Pandas中的.query()函数。它不完全是SQL,但它可以使一些基本的查询变得更容易,你可以理解它为一个简单的WHERE或.filter()的等价方法。

query()方法的文档比较少,你还可以使用&或者and、or、not等逻辑运算符,以及其它常见的操作符(例如==,<,>,!=等)来连接过滤器:

尽管query()方法提供了方便的语法来筛选DataFrame,但它的表达能力相对有限,某些复杂的查询可能无法使用单个query()表达式解决,需要使用其他方法或技巧来实现。

方法3:使用SmartNoteBook中dfSQL模块来查询DataFrame

SmartNoteBook是一款协作的、集成的、一站式的数据科学/分析环境,其内置的dfSQL方式可以快速实现利用SQL语句对DataFrame进行快速查询。通过dfSQL,用户可以实现利用简单的SQL语句,对Pandas数据框、当前环境下的csv文件以及已经存在的df变量进行访问,除了dfSQL方法也可实现对其它数据源的快速访问,其基本用法如下:

1. 利用dfSQL从DataFrame变量中查询:

在SmartNoteBook中新建的SQL单元格中,数据源我们选择dfSQL,cars变量是前面我们已经读取到变量空间中的DataFrame变量,则我们可以直接利用SQL语句对变量cars进行查询,所查询到的表结果保存为my_cars变量。

2. 利用dfSQL查询环境中的csv文件:

在上述的SQL单元格中,数据源我们选择dfSQL,Iris.csv是存在于本地的一个csv文件,我们可以通过dfSQL,利用SQL语句直接从环境中对其进行读取,并选择我们需要的变量进行聚合,重新保存在一个名为iris的DataFrame变量中。

3. 利用dfSQL进行联合数据分析

在执行SQL语句时,有时为了查到复杂的信息我们往往需要对多表联查或嵌套查询,dfSQL通过在内存中加载保存变量,可以使得其逻辑更具可读性:

上述SQL单元中,我们需要查询每个地区Miles_per_Gallon、Cylinders、Acceleration均大于其地区均值的相关信息。我们可以分为两步,先查出各个地区的相关变量均值,基于保存的df1变量,再从原表中取出满足条件的信息并将其保存名为df2的DataFrame变量。

4. 利用SQL直接访问数据源文件:

实际上在SmartNoteBook的SQL代码模块,其也支持选择数据源,直接对远程数据库进行访问并直接保存为DataFrame变量:

上述SQL单元,我们选择了名为mysql 数据源的远程数据仓库,利用SQL语句直接读取仓库中的信息,并将其保存为名为my_data的DataFrame变量。

dfSQL具有更轻量化,集成优秀的特点,其对接外部数据源不需要再建立复杂的链接,而且可以直接实现对DataFrame变量和本地csv文件的访问。后面执行的SQL查询可以引用NoteBook中之前已执行的SQL查询结果,就像我们写复杂SQL中包含许多CTE(公共表表达式)一样。用户可以使用这种方式将复杂SQL按照逻辑进行拆分,使整个查询过程更具可读性。

以上就是SQL操作Pandas DataFrame的三种方式示例详解的详细内容,更多关于SQL操作Pandas DataFrame的资料请关注脚本之家其它相关文章!

相关文章

  • Nginx实现TCP端口的侦听及转发操作步骤

    Nginx实现TCP端口的侦听及转发操作步骤

    这篇文章主要介绍了Nginx实现TCP端口的侦听及转发的相关资料,文章介绍了如何使用Nginx进行TCP代理(四层代理)来处理MQTT的集群需求,包括配置Nginx支持stream模块、编写TCP代理配置文件以及重新加载Nginx以应用更改,需要的朋友可以参考下
    2024-11-11
  • Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)

    Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)

    这篇文章主要介绍了Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度),需要的朋友可以参考下
    2022-01-01
  • ubuntu中如何使用nginx监听80端口进行转发

    ubuntu中如何使用nginx监听80端口进行转发

    这篇文章主要介绍了ubuntu中如何使用nginx监听80端口进行转发问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 教你如何使用 Nginx 进行负载均衡

    教你如何使用 Nginx 进行负载均衡

    Nginx 是一个高性能的 HTTP 和反向代理服务器,它也经常被用作邮件代理服务器和通用 TCP/UDP 代理服务器,本文我们将详细介绍如何使用 Nginx 进行负载均衡,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Nginx反向代理实现Vue跨域的示例

    Nginx反向代理实现Vue跨域的示例

    本文主要介绍了Nginx反向代理实现Vue跨域的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 利用SSL配置Nginx反向代理的简单步骤

    利用SSL配置Nginx反向代理的简单步骤

    这篇文章主要给大家介绍了关于利用SSL配置Nginx反向代理的简单步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Nginx大并发优化实战

    Nginx大并发优化实战

    这篇文章主要介绍了Nginx大并发优化实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Nginx日志的自动封异常ip和解封脚本方式

    Nginx日志的自动封异常ip和解封脚本方式

    这篇文章主要介绍了Nginx日志的自动封异常ip和解封脚本方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • nginx流量拷贝的实现示例

    nginx流量拷贝的实现示例

    Nginx的ngx_http_mirror_module模块提供流量复制功能,可将生产环境流量实时复制到测试环境,用于功能验证、性能测试和问题排查,下面就来详细的介绍一下nginx流量拷贝的使用,感兴趣的可以了解一下
    2026-01-01
  • 使用supervisor管理nginx+tomcat容器的方法示例

    使用supervisor管理nginx+tomcat容器的方法示例

    这篇文章主要介绍了使用supervisor管理nginx+tomcat容器的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论