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 守护好中华民族的文化瑰宝 7920188
- 2 梅大高速塌方致52死 调查报告发布 7974755
- 3 外交部回应特朗普征收25%关税 7879962
- 4 从年货购物车里解码消费新动向 7770319
- 5 江西“最强钉子户”:后悔没答应拆迁 7676454
- 6 向太给人取名主打一个简单 7574295
- 7 警犬因“班味过重”惨遭没收年终奖 7454067
- 8 砂糖橘吃多了真的会变小黄人 7399563
- 9 卖猪商户切肉时发现猪被打针 7270866
- 10 韩国网友抵制宋慧乔新片 7179324