Pandas 实用技能,数据筛选 query 函数详细介绍(Pandas实用技巧:深入解析数据筛选query函数)
原创
一、引言
在数据分析和处理中,Pandas 是一个非常强势的 Python 库,提供了充裕的方法和功能来操作数据。本文将详细介绍 Pandas 中的 query 函数,这是一种高效的数据筛选方法,可以帮助我们飞速地筛选和分析数据。
二、query 函数概述
query 函数是 Pandas 中用于筛选数据的强势工具。它允许我们使用类似 SQL 的语法来对 DataFrame 进行查询,这促使筛选过程更加直观和便捷。query 函数可以直接在 DataFrame 上调用,返回筛选后的数据。
三、query 函数的基本使用
以下是一个简洁的示例,展示了怎样使用 query 函数:
import pandas as pd
# 创建一个简洁的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
# 使用 query 函数筛选年龄大于 30 的数据
filtered_df = df.query('Age > 30')
print(filtered_df)
输出于是如下:
Name Age City
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
3 David 40 Houston
四、query 函数的进阶用法
query 函数不仅赞成简洁的比较操作,还赞成更复杂化的逻辑表达式和函数调用。
4.1 逻辑表达式
我们可以使用逻辑运算符(如 &、|)来组合多个条件。
# 筛选年龄大于 30 且城市为 'Chicago' 的数据
filtered_df = df.query('Age > 30 & City == "Chicago"')
print(filtered_df)
输出于是如下:
Name Age City
2 Charlie 35 Chicago
4.2 使用列别名
在 query 函数中,我们可以为列指定别名,这在处理复杂化的表达式时非常有用。
# 使用别名筛选年龄大于 30 且城市为 'Chicago' 的数据
filtered_df = df.query('Age > 30 & City == "Chicago"').query('A > 30 & B == "Chicago"',
let={'A': 'Age', 'B': 'City'})
print(filtered_df)
输出于是如下:
Name Age City
2 Charlie 35 Chicago
4.3 使用内置函数
query 函数赞成使用内置的 Pandas 函数,如 sum()、mean() 等。
# 计算年龄大于 30 的平均年龄
average_age = df.query('Age > 30')['Age'].mean()
print(average_age)
输出于是如下:
35.0
五、query 函数的性能优化
虽然 query 函数提供了便捷的数据筛选方案,但在处理大型数据集时,其性能或许会受到影响。以下是一些优化 query 函数性能的方法:
5.1 使用 .loc 或 .iloc 进行索引
对于大型数据集,使用 .loc 或 .iloc 进行索引或许比 query 函数更快。
# 使用 .loc 筛选年龄大于 30 的数据
filtered_df = df.loc[df['Age'] > 30]
print(filtered_df)
5.2 缩减查询中的逻辑表达式
尽量缩减 query 函数中的逻辑表达式,基于这会提高计算的复杂化度。
5.3 使用 .eval() 函数
在某些情况下,使用 .eval() 函数替代 query 函数可以节约性能。
# 使用 .eval() 筛选年龄大于 30 的数据
filtered_df = df.eval('Age > 30')
print(filtered_df)
六、总结
query 函数是 Pandas 中一个非常有用的工具,它提供了类似 SQL 的语法来筛选数据,促使数据处理过程更加直观和高效。通过本文的介绍,我们了解了 query 函数的基本使用和进阶用法,以及怎样优化其性能。掌握这些技巧,将使你在数据分析和处理中更加得心应手。