跳到主要内容

Pandas 条件选择

在数据分析中,我们经常需要根据某些条件从数据集中筛选出特定的数据。Pandas提供了强大的条件选择功能,使得这一过程变得简单而高效。本文将详细介绍如何使用Pandas进行条件选择,并通过实际案例帮助你掌握这一技能。

什么是条件选择?

条件选择是指根据某些条件从数据集中筛选出符合条件的数据。例如,你可能希望从一个包含学生成绩的数据集中筛选出所有成绩大于90分的学生。Pandas提供了多种方法来实现条件选择,包括布尔索引、query()方法等。

布尔索引

布尔索引是Pandas中最常用的条件选择方法之一。它通过创建一个布尔数组(即由TrueFalse组成的数组)来筛选数据。布尔数组的长度必须与DataFrame的行数相同,True表示选择该行,False表示不选择。

示例:筛选成绩大于90分的学生

假设我们有一个包含学生姓名和成绩的DataFrame:

python
import pandas as pd

data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Score': [85, 92, 88, 95, 89]
}

df = pd.DataFrame(data)
print(df)

输出:

      Name  Score
0 Alice 85
1 Bob 92
2 Charlie 88
3 David 95
4 Eva 89

现在,我们想要筛选出成绩大于90分的学生。可以使用布尔索引来实现:

python
high_scores = df[df['Score'] > 90]
print(high_scores)

输出:

    Name  Score
1 Bob 92
3 David 95

解释

  • df['Score'] > 90:这是一个布尔表达式,返回一个布尔数组,表示每一行的Score是否大于90。
  • df[df['Score'] > 90]:使用布尔数组作为索引,筛选出True对应的行。

多条件选择

在实际应用中,我们可能需要根据多个条件进行筛选。Pandas支持使用逻辑运算符(如&|~)来组合多个条件。

示例:筛选成绩大于90分且姓名为Bob的学生

python
high_scores_bob = df[(df['Score'] > 90) & (df['Name'] == 'Bob')]
print(high_scores_bob)

输出:

  Name  Score
1 Bob 92

解释

  • (df['Score'] > 90):筛选出成绩大于90分的学生。
  • (df['Name'] == 'Bob'):筛选出姓名为Bob的学生。
  • &:逻辑与运算符,表示两个条件都必须满足。
备注

注意:在使用多条件选择时,每个条件必须用括号括起来,以避免运算符优先级问题。

query()方法

除了布尔索引,Pandas还提供了query()方法来进行条件选择。query()方法允许你使用字符串表达式来指定筛选条件,语法更加简洁。

示例:使用query()筛选成绩大于90分的学生

python
high_scores_query = df.query('Score > 90')
print(high_scores_query)

输出:

    Name  Score
1 Bob 92
3 David 95

解释

  • query('Score > 90'):使用字符串表达式指定筛选条件,筛选出成绩大于90分的学生。
提示

query()方法在处理复杂条件时非常有用,尤其是在条件表达式较长时,可以提高代码的可读性。

实际案例:筛选电商订单数据

假设我们有一个包含电商订单数据的DataFrame,其中包含订单ID、客户ID、订单金额和订单状态等信息。我们需要筛选出所有已完成的订单,并且订单金额大于1000元。

python
data = {
'OrderID': [1, 2, 3, 4, 5],
'CustomerID': [101, 102, 103, 104, 105],
'Amount': [1200, 800, 1500, 900, 1100],
'Status': ['Completed', 'Pending', 'Completed', 'Pending', 'Completed']
}

orders_df = pd.DataFrame(data)
print(orders_df)

输出:

   OrderID  CustomerID  Amount     Status
0 1 101 1200 Completed
1 2 102 800 Pending
2 3 103 1500 Completed
3 4 104 900 Pending
4 5 105 1100 Completed

现在,我们筛选出所有已完成的订单,并且订单金额大于1000元:

python
completed_high_amount = orders_df[(orders_df['Status'] == 'Completed') & (orders_df['Amount'] > 1000)]
print(completed_high_amount)

输出:

   OrderID  CustomerID  Amount     Status
0 1 101 1200 Completed
2 3 103 1500 Completed
4 5 105 1100 Completed

解释

  • (orders_df['Status'] == 'Completed'):筛选出状态为“Completed”的订单。
  • (orders_df['Amount'] > 1000):筛选出金额大于1000元的订单。
  • &:逻辑与运算符,表示两个条件都必须满足。

总结

Pandas的条件选择功能非常强大,能够帮助我们轻松地从数据集中筛选出符合特定条件的数据。通过布尔索引和query()方法,我们可以灵活地实现单条件和多条件筛选。在实际应用中,条件选择是数据分析中不可或缺的一部分,掌握这一技能将大大提高你的数据处理效率。

附加资源与练习

  • 练习1:创建一个包含学生姓名、年龄和成绩的DataFrame,筛选出年龄大于18岁且成绩大于85分的学生。
  • 练习2:使用query()方法筛选出订单状态为“Pending”且订单金额小于500元的订单。
警告

在进行条件选择时,务必注意条件的逻辑关系,避免因运算符优先级问题导致筛选结果错误。

希望本文能帮助你更好地理解Pandas的条件选择功能。继续练习,你将能够熟练地运用这些技巧来处理各种数据分析任务!