温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Pandas Query方法如何使用

发布时间:2022-07-27 09:57:13 来源:亿速云 阅读:145 作者:iii 栏目:开发技术

这篇文章主要讲解了“Pandas Query方法如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pandas Query方法如何使用”吧!

    获取数据

    载入数据

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

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

    数据集有 891 行和 12 列:

    Pandas Query方法如何使用

    使用 query() 方法

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

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

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

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

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

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

    Pandas Query方法如何使用

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

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

    查询结果如下

    Pandas Query方法如何使用

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

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

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

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

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

    Pandas Query方法如何使用

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

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

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

    Pandas Query方法如何使用

    其实可以直接在列名上调用各种 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 的所有行:

    Pandas Query方法如何使用

    比较多个列

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

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

    下面是查询结果

    Pandas Query方法如何使用

    查询索引

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

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

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

    df.query('index==1')

    结果如下

    Pandas Query方法如何使用

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

    df.query('index<5')

    结果如下

    Pandas Query方法如何使用

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

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

    结果如下

    Pandas Query方法如何使用

    比较多列

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

    df.query('Parch > SibSp')

    结果如下

    Pandas Query方法如何使用

    感谢各位的阅读,以上就是“Pandas Query方法如何使用”的内容了,经过本文的学习后,相信大家对Pandas Query方法如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI