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 习近平澳门之行 这些瞬间令人难忘 7944440
- 2 32岁飞行员晋升机长失败当天失联 7920005
- 3 旅客扒高铁车门遭拖行:手被夹住 7837779
- 4 在澳门 传统文化在指尖绽放 7760787
- 5 岁月静好在赵丽颖身上具象化了 7678807
- 6 女大学生当收纳师一单赚16万 7536108
- 7 陈丽君 首届电影中国最佳男主角 7466580
- 8 冰雪大世界排队让大哥崩溃了 7349094
- 9 正式确诊了间歇性厌友症 7294016
- 10 非遗冬至宴 消寒祈福长 7114407