首页 > 其他分享 >Pandas Query 方法深度总结,你学会了吗?

Pandas Query 方法深度总结,你学会了吗?

时间:2023-04-11 18:34:17浏览次数:49  
标签:Embarked df 深度 使用 查询 query Query 方法 Pandas

[Pandas Query 方法深度总结,你学会了吗?-51CTO.COM](https://www.51cto.com/article/714736.html)   数据库其他数据库 事实证明实际上可以使用 query()​ 方法做到这一点。因此,在今天的文章中,我们将展示如何使用 query() 方法对数据框执行查询。

大多数 Pandas 用户都熟悉 iloc[]​ 和 loc[] 索引器方法,用于从 Pandas DataFrame 中检索行和列。但是随着检索数据的规则变得越来越复杂,这些方法也随之变得更加复杂而臃肿。

同时 SQL 也是我们经常接触且较为熟悉的语言,那么为什么不使用类似于 SQL 的东西来查询我们的数据呢?

事实证明实际上可以使用 query()​ 方法做到这一点。因此,在今天的文章中,我们将展示如何使用 query() 方法对数据框执行查询。

获取数据

我们使用 kaggle 上的 Titanic 数据集作为本文章的测试数据集,下载地址如下:

https://www.kaggle.com/datasets/tedllh/titanic-train

当然也可以在文末获取到萝卜哥下载好的数据集

载入数据

下面文末就可以使用 read_csv 来载入数据了

import pandas as pd
df = pd.read_csv('titanic_train.csv')
df

 

数据集有 891 行和 12 列:

图片

使用 query() 方法

让我们找出从南安普敦 (‘S’) 出发的所有乘客,可以使用方括号索引,代码如下所示:

df[df['Embarked'] == 'S']

 

如果使用 query() 方法,那么看起来更整洁:

df.query('Embarked == "S"')

 

与 SQL 比较,则 query() 方法中的表达式类似于 SQL 中的 WHERE 语句。

结果是一个 DataFrame,其中包含所有从南安普敦出发的乘客:

图片

query() 方法接受字符串作为查询条件串,因此,如果要查询字符串列,则需要确保字符串被正确括起来:

图片

很多时候,我们可能希望将变量值传递到查询字符串中,可以使用 @ 字符执行此操作:

embarked = 'S'
df.query('Embarked == @embarked')

 

或者也可以使用 f 字符串,如下所示:

df.query(f'Embarked == "{embarked}"')

 

就个人而言,我认为与 f-string 方式相比,使用 @ 字符更简单、更优雅,你认为呢

如果列名中有空格,可以使用反引号 (``) 将列名括起来:

df.query('`Embarked On` == @embarked')

 

以 In-place 的方式执行 query 方法

当使用 query() 方法执行查询时,该方法将结果作为 DataFrame 返回,原始 DataFrame 保持不变。如果要更新原始 DataFrame,需要使用 inplace 参数,如下所示:

df.query('Embarked == "S"', inplace=True)

 

当 inplace 设置为 True 时,query() 方法将不会返回任何值,原始 DataFrame 被修改。

指定多个条件查询

我们可以在查询中指定多个条件,例如假设我想获取所有从南安普敦 (‘S’) 或瑟堡 (‘C’) 出发的乘客。如果使用方括号索引,这种语法很快变得非常笨拙:

df[(df['Embarked'] == 'S') | (df['Embarked'] == 'C')]

 

我们注意到,在这里我们需要在查询的条件下引用 DataFrame 两次,而使用 query() 方法,就简洁多了:

df.query('Embarked in ("S","C")')

 

查询结果如下:

图片

如果要查找所有不是从南安普敦(‘S’)或瑟堡(‘C’)出发的乘客,可以在 Pandas 中使用否定运算符 (~):

df[~((df['Embarked'] == 'S') | (df['Embarked'] == 'C'))]

 

使用 query() 方法,只需要使用 not 运算符:

df.query('Embarked not in ("S","C")')

 

以下输出显示了从皇后镇 (‘Q’) 出发的乘客以及缺失值的乘客:

图片

说到缺失值,该怎么查询缺失值呢,当应用于列名时,我们可以使用 isnull() 方法查找缺失值:

df.query('Embarked.isnull()')

 

现在将显示 Embarked 列中缺少值的行:

图片

其实可以直接在列名上调用各种 Series 方法:

df.query('Name.str.len() < 20')  # find passengers whose name is 
                                 # less than 20 characters
df.query(f'Ticket.str.startswith("A")') # find all passengers whose 
                                        # ticket starts with A

 

比较数值列

我们还可以轻松比较数字列:

df.query('Fare > 50')

 

以下输出显示了票价大于 50 的所有行:

图片

比较多个列

还可以使用 and、or 和 not 运算符比较多个列,以下语句检索 Fare 大于 50 和 Age 大于 30 的所有行:

df.query('Fare > 50 and Age > 30')

 

下面是查询结果:

图片

查询索引

通常当我们想根据索引值检索行时,可以使用 loc[] 索引器,如下所示:

df.loc[[1],:]  # get the row whose index is 1; return as a dataframe

 

但是使用 query() 方法,使得事情变得更加直观:

df.query('index==1')

 

结果如下:

图片

如果要检索索引值小于 5 的所有行:

df.query('index<5')

 

结果如下:

图片

我们还可以指定索引值的范围:

df.query('6 <= index < 20')

 

结果如下

图片

比较多列

我们还可以比较列之间的值,例如以下语句检索 Parch 值大于 SibSp 值的所有行:

df.query('Parch > SibSp')

 

结果如下:

图片

总结

从上面的示例可以看出,query() 方法使搜索行的语法更加自然简洁,希望感兴趣的小伙伴多加练习,真正的达到融会贯通的地步哦!

标签:Embarked,df,深度,使用,查询,query,Query,方法,Pandas
From: https://www.cnblogs.com/ministep/p/17307250.html

相关文章

  • mouted阶段无法通过querySelectAll获取dom元素
    要获取的元素是通过v-for渲染出来的时候,dom元素依赖的数据是通过异步请求获取的,mouted时v-for的数据还没有获取到,故没有元素产生,mouted无法获取元素,可以使用nexttick和watch结合来用,监听dom元素依赖的数据变化,用nextTick来管理数据,在数据获取之后再获取dom元素......
  • 论文《深度多尺度卷积LSTM网络的出行需求和出发地预测》
    学习参考:https://blog.csdn.net/zuiyishihefang/article/details/128030409论文题目:《DeepMulti-ScaleConvolutionalLSTMNetworkforTravelDemandandOrigin-DestinationPredictions》是2020年发表在IEEE的文章。出处:IEEETransactionsonIntelligentTransportationS......
  • 事实胜于雄辩,苹果MacOs能不能玩儿机器/深度(ml/dl)学习(Python3.10/Tensorflow2)
    坊间有传MacOs系统不适合机器(ml)学习和深度(dl)学习,这是板上钉钉的刻板印象,就好像有人说女生不适合编程一样的离谱。现而今,无论是Pytorch框架的MPS模式,还是最新的Tensorflow2框架,都已经可以在M1/M2芯片的Mac系统中毫无桎梏地使用GPU显卡设备,本次我们来分享如何在苹果MacOS系统上......
  • 深度剖析Redis九种数据结构实现原理,建议收藏
    1.Redis介绍Redis是一个高性能的键值存储系统,支持多种数据结构。包含五种基本类型String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图)。每种数据结构都是为了解决特定问题而设计的,适用不同的场景。想要......
  • 每日学习记录20230221_purr包 GSEA pandas
    20230221:purr包GSEApandaspurr的map_*函数的使用DF=List1%>%names%>%map_dfr(function(x){#把List1转化成DataFrame的格式,map_dfr是把结果都按行合并起来.return(data.frame(x,List1[[x]]$'all'))})clusterProfile::GSEA调用的是DOS......
  • 基于深度学习网络的5G通信链路信道估计算法matlab仿真
    1.算法描述        深度学习(英语:deeplearning),是一个多层神经网络是一种机器学习方法。在深度学习出现之前,由于诸如局部最优解和梯度消失之类的技术问题,没有对具有四层或更多层的深度神经网络进行充分的训练,并且其性能也不佳。但是,近年来,Hinton等人通过研究多层神经网络,......
  • 深度学习环境配置
    深度学习环境配置一、软硬件配置介绍操作系统:Windows10和Ubuntu20.04均适用GPU:NvidiaGeforceRTX3060Python:3.8二、环境配置步骤1、安装显卡驱动(1)Windows10​ 在Nvidia驱动下载官网下载522.25版本的驱动并安装。(2)Ubuntu20.04​ 打开系统设置,找到软件更新......
  • Pandas模块实现向Excel写入数据
    Pandas模块实现向Excel写入数据importpandasaspddfData={#用字典设置DataFrame所需数据'序号':data[0],'项目':data[1],'数据':data[2]}#创建DataFramedf=pd.DataFrame(dfData)#存表,去除原始索引列(0,1,2...)df.to_excel(fi......
  • postgresSQL Extended Query执行过程和sharding-proxy的处理
    pgExtendedQueryPostgreSQL:Documentation:15:55.2. MessageFlow多个阶段,可复用Parse→DESCRIBEstatement→SYNCParse解析,将sql文本字符串,解析成namedpreparedStatement语句(生命周期随session)占位符和参数类型Describe获取元数据,返回pst参数描述......
  • Pycharm中安装了pandas模块,但在引入该模块时提示No module named 'pandas'
    之前遇到一个问题,先放上问题截图  pandas模块是安装在site-packages目录下的一个文件,但是引用时可以看到有红色的波浪线提示没有该模块,我们可以这样试试将projectstructure添加site-packages目录,步骤:(1)选择File—>settings—>project:pythonWork—>projectstructure  ......