返回

用Pandas的query()方法优雅地查询数据

人工智能

Pandas Query() 方法:掌握高效数据过滤的利器

引言

数据分析的关键步骤之一是过滤数据以获取所需信息。在 Python 中,Pandas 库提供了强大的 query() 方法,它使我们能够基于条件轻松高效地过滤 DataFrame。本文将深入探讨 query() 方法,从基础知识到高级用法,帮助您充分利用其潜力。

什么是 Pandas Query() 方法?

query() 方法是一种用于根据特定条件从 DataFrame 中选择特定行的工具。它接受一个字符串表达式作为参数,该表达式指定要应用的过滤条件。这些条件可以是任何有效的 Python 表达式,包括比较运算符、逻辑运算符和 Pandas 函数。

入门

要使用 query() 方法,您首先需要创建一个 DataFrame。然后,您可以将 query() 方法应用于 DataFrame,如下所示:

import pandas as pd

df = pd.DataFrame({
    'Name': ['John', 'Mary', 'Peter', 'Susan'],
    'Age': [20, 25, 30, 35],
    'City': ['New York', 'London', 'Paris', 'Tokyo']
})

# 过滤年龄大于 30 的行
result = df.query('Age > 30')
print(result)

输出:

   Name  Age  City
2  Peter  30  Paris
3  Susan  35  Tokyo

在这个示例中,query() 方法将过滤出年龄大于 30 的行。

比较运算符

query() 方法支持以下比较运算符:

  • ==:等于
  • !=:不等于
  • >:大于
  • <:小于
  • >=:大于或等于
  • <=:小于或等于

使用这些运算符,您可以比较列中的值并过滤符合特定条件的行。

逻辑运算符

除了比较运算符之外,query() 方法还支持以下逻辑运算符:

  • &:逻辑与
  • |:逻辑或
  • ~:逻辑非

这些运算符允许您组合多个条件以创建更复杂、更具体的过滤器。

示例

例如,要过滤出年龄大于 30 且居住在伦敦或巴黎的行,您可以使用以下条件:

result = df.query('Age > 30 & (City == "London" | City == "Paris")')
print(result)

输出:

   Name  Age  City
2  Peter  30  Paris

Pandas 函数

除了比较和逻辑运算符之外,query() 方法还允许您使用 Pandas 函数来进行更复杂的查询。例如,可以使用 str.contains() 函数过滤包含特定子字符串的行:

result = df.query('Name.str.contains("e")')
print(result)

输出:

   Name  Age  City
0  John  20  New York
1  Mary  25  London

案例研究

query() 方法在数据分析中具有广泛的应用。以下是一些示例:

  • 识别客户中特定年龄组的购买模式
  • 过滤异常值和异常数据点
  • 从大型数据集中的特定记录
  • 根据特定标准汇总或分组数据

结论

query() 方法是 Pandas 中一项强大的工具,可用于基于条件有效过滤 DataFrame 中的数据。通过了解其基础知识和高级用法,您可以充分利用其功能,轻松获取所需数据,并提高数据分析效率。

常见问题解答

  1. 如何使用 query() 方法过滤多个列?

    result = df.query('Age > 30 & City.isin(["London", "Paris"])')
    
  2. 如何在 query() 方法中使用通配符?

    可以使用 str.contains() 函数来查找包含特定子字符串的行:

    result = df.query('Name.str.contains(".*e.*")')
    
  3. 如何使用 query() 方法排序结果?

    query() 方法之后使用 sort_values() 方法:

    result = df.query('Age > 30').sort_values('Age', ascending=False)
    
  4. 如何使用 query() 方法分组数据?

    可以使用 groupby() 方法在过滤后对数据进行分组:

    result = df.query('Age > 30').groupby('City').mean()
    
  5. 如何使用 query() 方法创建子查询?

    可以使用 query() 方法作为 DataFrame 的子查询:

    subquery = df.query('Age > 30')
    result = df[df['Name'].isin(subquery['Name'])]