Pandas之query函数

使用Pandas的query函数过滤DataFrame
本文介绍了一种使用Python的Pandas库中query函数的简便方法来过滤DataFrame。通过示例展示了如何根据特定条件筛选数据帧,这对于数据分析和处理任务非常有用。

我们有时需要根据条件过滤一个数据帧。过滤数据帧的一个简单方法是query函数。

import pandas as pd
import numpy as np

values_1 = np.random.randint(10, size=10)
values_2 = np.random.randint(10, size=10)
years = np.arange(2010, 2020)
groups = ['A','A','B','A','B','B','C','A','C','C']
df = pd.DataFrame({'group':groups, 'year':years, 'value_1':values_1, 'value_2':values_2})

print(df)

 

 

 

 

 

 

 

使用查询函数非常简单,只需要编写条件。

df1 = df.query('value_1 < value_2')
print(df1)

 

 

 

 

<think>我们被要求使用pandasquery函数,并且用户提供了几个引用作为背景。我们的回答需要结构化,清晰,并且使用中文。 根据引用,我们知道query函数用于基于字符串表达式筛选DataFrame。基本语法是df.query(expr),其中expr是字符串形式的条件表达式。 我们还可以使用变量,通过在变量名前加@符号。 用户要求提供示例,因此我们将展示几个常见的示例。 步骤: 1. 介绍query函数的基本用法。 2. 展示几个示例,包括使用列条件、使用变量、多条件组合等。 3. 注意:在示例中,我们将创建一个简单的DataFrame,然后使用query进行查询。 同时,我们需要生成相关问题。 注意:在回答中,我们使用行内数学表达式用$...$,但这里可能用不到数学公式。独立公式用$$...$$,但同样可能用不到。 因此,我们主要关注代码示例和文字说明。 引用标识:在引用参考内容的地方添加引用标识,如[^1]。</think>### Pandas query函数使用方法详解 `query()`函数Pandas中基于字符串表达式筛选DataFrame的高效工具,语法简洁且支持复杂条件逻辑[^2][^4]。基本语法如下: ```python DataFrame.query(expr, inplace=False, **kwargs) ``` - **expr**:字符串形式的查询表达式 - **inplace**:是否原地修改(默认`False`返回新对象) - **kwargs**:支持局部变量(通过`@变量名`引用) --- ### 核心使用场景与示例 #### 1. 基础列条件筛选 ```python import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': ['X', 'Y', 'Z']}) # 筛选列A大于1的行 result = df.query('A > 1') print(result) ``` **输出**: ``` A B C 1 2 5 Y 2 3 6 Z ``` #### 2. 多条件组合(逻辑运算符) ```python # 筛选A>1且C='Z'的行 result = df.query('A > 1 and C == "Z"') ``` #### 3. 使用外部变量(@符号) ```python threshold = 2 category = "Y" # 动态传入变量值 result = df.query('A > @threshold and C == @category') ``` #### 4. 排除特定值(`not in`) ```python exclude_list = ['X', 'Z'] result = df.query('C not in @exclude_list') # 仅保留C='Y'的行[^1][^3] ``` #### 5. 索引条件筛选 ```python # 筛选索引大于0的行 result = df.query('index > 0') ``` #### 6. 复杂数学表达式 ```python # 筛选(A+B)的平方大于25的行 result = df.query('(A + B)**2 > 25') ``` --- ### 性能与优势 - **可读性**:比传统布尔索引(如`df[df.A>1]`)更清晰[^4] - **效率**:对大型DataFrame,底层使用`numexpr`库加速计算[^4] - **安全性**:自动处理特殊字符(如列名含空格需用反引号包裹:`` `col name` > 0 ``) --- ### 注意事项 1. 字符串值需用双引号包裹(如`C == "Y"`) 2. 列名与Python关键字冲突时需用反引号转义 3. 对超大数据集,优先使用`eval()`优化链式操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码爱撞墙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值