在本文中,我们将介绍Pandas的query函数,这是一种简化编写查询和过滤条件的方法。尤其是在处理具有多个查询条件的情况下,query函数可以大大简化我们的代码。我将为您提供10个示例,掌握这些示例,您就能够轻松地使用query函数解决各种数据查询问题。
首先,让我们将数据集导入Pandas DataFrame中,命名为df:
<code>import pandas as pd df = pd.read_csv("Dummy_Sales_Data_v1.csv") df.head()</code>
这是一个包含9999行和12列的简单数据集,是使用Faker库创建的。在本文的最后,我将提供所有示例的源代码。
在开始之前,让我们快速回顾一下Pandas中的query函数。query函数用于根据指定的表达式提取记录,并返回一个新的DataFrame。表达式以字符串形式表示条件或条件的组合。
Pandas的DataFrame属性.loc和.iloc用于根据行和列标签或索引提取数据集的子集。虽然这些方法在数据子集的提取上非常灵活,但在处理多个查询条件时可能会显得繁琐。而用方括号[]进行数据帧过滤的方法则会更加繁琐,尤其是当有多个条件时。
而Pandas的query函数可以根据一个或多个条件提取子集,这些条件被写成表达式,无需考虑括号的嵌套。
单一条件过滤示例
在单一条件下进行过滤时,查询表达式中只包含一个条件。返回的输出将包含所有行,其中该表达式评估为True。
示例1:
提取数量为95的所有行,查询表达式可以写成:
<code>df.query("Quantity == 95")</code>
这个查询将返回所有数量为95的行。相同的查询也可以写成:
<code>df[df["Quantity"] == 95]</code>
但是,如果想在同一列中包含另一个条件,该怎么办呢?接下来我们将展示如何处理多个条件的查询。
多个条件过滤示例
当有两个或多个条件需要同时满足时,query函数的语法保持不变。我们需要指定两个或多个条件来进行过滤,可以使用and和or关键字。
示例2:
查询数量为95且单位价格为182的所有行:
<code>df.query("Quantity == 95 and `UnitPrice(USD)` == 182")</code>
请注意,列名包含空格或特殊字符时,需要使用反引号“来包裹列名。
示例3:
查询数量为95或单位价格为182的所有行:
<code>df.query("Quantity == 95 or `UnitPrice(USD)` == 182")</code>
除了and和or关键字外,我们还可以使用|代替or关键字。
示例4:
查询数量不等于95的所有行:
<code>df.query("Quantity != 95")</code>
文本列过滤示例
对于文本列的过滤,条件是列名与字符串的比较。
示例5:
查询状态为“未发货”的所有记录:
<code>df.query("Status == 'Not Shipped'")</code>
数学计算在查询中的应用示例
数学操作可以在查询表达式中进行加减乘除等计算。
示例6:
查询运费的两倍小于50的行:
<code>df.query("Shipping_Cost*2 < 50")</code>
内置函数在查询中的应用示例
Python内置函数,如SQRT()、ABS()、Factorial()、EXP()等,也可以在查询表达式中使用。
示例7:
查找单位价格的平方根大于15的行:
<code>df.query("sqrt(`UnitPrice(USD)`) > 15")</code>
日期时间列过滤示例
对于日期时间值的过滤,需要将列转换为dateTime64 [ns]数据类型,并使用DT提取器进行日期时间操作。
示例8:
提取八月份的所有记录:
<code>df.query("OrderDate.dt.month == 8")</code>
示例9:
提取2021年8月15日及之后的所有订单:
<code>df.query("OrderDate >= '2021-08-15'")</code>
示例10:
结合多个条件进行日期时间过滤:
<code>df.query("OrderDate >= '2021-08-15' and OrderDate <= '2021-08-31' and Status == 'Delivered'")</code>
结论
通过阅读本文,希望您能更熟练地使用Pandas的Query函数进行数据查询和过滤。Query函数能够极大地简化我们的代码,并且能够处理各种复杂的查询条件。我每天都在使用Query函数,相信您也会在日常数据处理中受益匪浅。
暂无评论内容