跳到主要内容

Pandas 复杂条件

在数据分析和处理中,筛选数据是一个常见的任务。Pandas 提供了强大的工具来帮助我们根据条件选择数据。简单条件(如选择某一列大于某个值的数据)很容易实现,但在实际应用中,我们经常需要处理更复杂的条件。本文将介绍如何在 Pandas 中使用复杂条件进行数据筛选和选择。

什么是复杂条件?

复杂条件通常涉及多个条件的组合,使用逻辑运算符(如 &|~)来连接这些条件。例如,你可能需要选择某一列的值大于某个值 并且 另一列的值小于某个值的数据。这种多条件的组合就是复杂条件。

逻辑运算符

在 Pandas 中,我们使用以下逻辑运算符来组合条件:

  • &:逻辑与(AND)
  • |:逻辑或(OR)
  • ~:逻辑非(NOT)
警告

注意:在 Pandas 中,逻辑运算符必须用括号 () 包裹每个条件,否则会引发错误。

示例:使用逻辑与(AND)

假设我们有一个 DataFrame df,其中包含以下数据:

python
import pandas as pd

data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [24, 27, 22, 32, 29],
'Salary': [50000, 54000, 48000, 62000, 58000]
}

df = pd.DataFrame(data)

如果我们想要选择年龄大于 25 并且 工资小于 60000 的员工,可以使用以下代码:

python
filtered_df = df[(df['Age'] > 25) & (df['Salary'] < 60000)]
print(filtered_df)

输出:

    Name  Age  Salary
1 Bob 27 54000
4 Eva 29 58000

示例:使用逻辑或(OR)

如果我们想要选择年龄小于 25 或者 工资大于 60000 的员工,可以使用以下代码:

python
filtered_df = df[(df['Age'] < 25) | (df['Salary'] > 60000)]
print(filtered_df)

输出:

      Name  Age  Salary
0 Alice 24 50000
2 Charlie 22 48000
3 David 32 62000

示例:使用逻辑非(NOT)

如果我们想要选择年龄 小于 25 的员工,可以使用以下代码:

python
filtered_df = df[~(df['Age'] < 25)]
print(filtered_df)

输出:

    Name  Age  Salary
1 Bob 27 54000
3 David 32 62000
4 Eva 29 58000

实际应用场景

场景 1:筛选特定时间范围内的数据

假设我们有一个包含日期和销售额的 DataFrame,我们想要筛选出 2023 年 1 月 1 日到 2023 年 3 月 31 日之间的数据。

python
data = {
'Date': pd.date_range(start='2023-01-01', end='2023-12-31', freq='D'),
'Sales': [100 + i for i in range(365)]
}

df = pd.DataFrame(data)

start_date = '2023-01-01'
end_date = '2023-03-31'

filtered_df = df[(df['Date'] >= start_date) & (df['Date'] <= end_date)]
print(filtered_df.head())

输出:

        Date  Sales
0 2023-01-01 100
1 2023-01-02 101
2 2023-01-03 102
3 2023-01-04 103
4 2023-01-05 104

场景 2:多条件组合筛选

假设我们有一个包含学生成绩的 DataFrame,我们想要筛选出数学成绩大于 80 并且 英语成绩大于 75 的学生。

python
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Math': [85, 78, 90, 82, 88],
'English': [80, 76, 85, 70, 90]
}

df = pd.DataFrame(data)

filtered_df = df[(df['Math'] > 80) & (df['English'] > 75)]
print(filtered_df)

输出:

      Name  Math  English
0 Alice 85 80
2 Charlie 90 85
4 Eva 88 90

总结

在 Pandas 中,复杂条件的筛选是通过逻辑运算符 &|~ 来实现的。每个条件必须用括号包裹,以避免语法错误。通过组合多个条件,我们可以灵活地筛选出符合特定要求的数据。

提示

练习:尝试创建一个包含多个条件的复杂筛选,例如选择年龄在 25 到 30 岁之间 并且 工资在 50000 到 60000 之间的员工。

附加资源

通过掌握复杂条件的筛选技巧,你将能够更高效地处理和分析数据。继续练习,提升你的 Pandas 技能吧!