Pandas Query 方法深度总结

作者 | 周萝卜
来源 |?萝卜大杂烩
iloc[] 和 loc[] 索引器方法,用于从 Pandas DataFrame 中检索行和列。但是随着检索数据的规则变得越来越复杂,这些方法也随之变得更加复杂而臃肿。事实证明实际上可以使用 query() 方法做到这一点。因此,在今天的文章中,我们将展示如何使用 query() 方法对数据框执行查询
获取数据
我们使用 kaggle 上的 Titanic 数据集作为本文章的测试数据集。
载入数据
import?pandas?as?pd
df?=?pd.read_csv('titanic_train.csv')
df

使用 query() 方法
df[df['Embarked']?==?'S']
query() 方法,那么看起来更整洁:df.query('Embarked?==?"S"')
与 SQL 比较,则 query() 方法中的表达式类似于 SQL 中的 WHERE 语句。


embarked?=?'S'
df.query('Embarked?==?@embarked')
df.query(f'Embarked?==?"{embarked}"')
就个人而言,我认为与 f-string 方式相比,使用 @ 字符更简单、更优雅,你认为呢
df.query('`Embarked?On`?==?@embarked')
以 In-place 的方式执行 query 方法
df.query('Embarked?==?"S"',?inplace=True)
query() 方法将不会返回任何值,原始 DataFrame 被修改。指定多个条件查询
df[(df['Embarked']?==?'S')?|?(df['Embarked']?==?'C')]
df.query('Embarked?in?("S","C")')

df[~((df['Embarked']?==?'S')?|?(df['Embarked']?==?'C'))]
query() 方法,只需要使用 not 运算符:df.query('Embarked?not?in?("S","C")')

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

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')

比较多个列
df.query('Fare?>?50?and?Age?>?30')

查询索引
loc[] 索引器,如下所示:df.loc[[1],:]??#?get?the?row?whose?index?is?1;?return?as?a?dataframe
df.query('index==1')

df.query('index<5')

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

比较多列
df.query('Parch?>?SibSp')

总结
query() 方法使搜索行的语法更加自然简洁,希望感兴趣的小伙伴多加练习,真正的达到融会贯通的地步哦~
往期回顾 分享
点收藏
点点赞
点在看
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675













AI100
