使用 query() 方法
如果使用 query()
方法,那么看起来更整洁
df.query('Embarked == "S"')
很多时候,我们可能希望将变量值传递到查询字符串中,可以使用 @ 字符执行此操作:
embarked = 'S'
df.query('Embarked == @embarked')
或者也可以使用 f 字符串,如下所示:
df.query(f'Embarked == "{embarked}"')
如果列名中有空格,可以使用反引号 (``) 将列名括起来:
df.query('`Embarked On` == @embarked')
当使用 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")')
说到缺失值,该怎么查询缺失值呢,当应用于列名时,我们可以使用 isnull() 方法查找缺失值:
df.query('Embarked.isnull()')
其实可以直接在列名上调用各种 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')
比较多个列
还可以使用 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')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律