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到底能做什么

    全面解析Nginx到底能做什么

    本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,具体内容详情大家跟随小编一起通过本文学习吧
    2018-10-10
  • nginx location 配置 正则表达式实例详解

    nginx location 配置 正则表达式实例详解

    本文通过实例代码给大家介绍了nginx location 配置 正则表达式的问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • keepalived + nginx 实现高可用方案

    keepalived + nginx 实现高可用方案

    这篇文章主要介绍了keepalived + nginx 实现高可用方案的相关资料,需要的朋友可以参考下
    2022-12-12
  • Node.js站点使用Nginx作反向代理时配置GZip压缩的教程

    Node.js站点使用Nginx作反向代理时配置GZip压缩的教程

    这篇文章主要介绍了Node.js站点使用Nginx作反向代理时配置GZip压缩的教程,文中演示了Node使用Express框架时的HTTP传输压缩配置,需要的朋友可以参考下
    2016-04-04
  • 苹果M1芯片安装nginx 并且部署vue项目步骤详解

    苹果M1芯片安装nginx 并且部署vue项目步骤详解

    在本篇文章里小编给大家整理了一篇关于苹果M1芯片安装nginx 并且部署vue项目步骤详解内容,有需要的朋友们可以跟着学习参考下。
    2021-11-11
  • 详解Nginx服务器中配置超时时间的方法

    详解Nginx服务器中配置超时时间的方法

    这篇文章主要介绍了Nginx服务器中配置超时时间的方法,同时也对Nginx中的时间管理机制作了详细的介绍,需要的朋友可以参考下
    2015-12-12
  • 利用nginx搭建RTMP视频点播、直播、HLS服务器

    利用nginx搭建RTMP视频点播、直播、HLS服务器

    本文主要介绍了利用nginx搭建RTMP视频点播、直播、HLS服务器,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • nginx中共享内存的使用详解

    nginx中共享内存的使用详解

    这篇文章主要介绍了nginx中共享内存的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Nginx修改默认80端口(解决跟Tomcat的端口冲突)

    Nginx修改默认80端口(解决跟Tomcat的端口冲突)

    本文主要介绍了Nginx修改默认80端口(解决跟Tomcat的端口冲突),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • nginx多域名转发的实现

    nginx多域名转发的实现

    本文主要介绍了nginx多域名转发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论