使用 Pandas loc 按多个条件选择数据

2023-10-13

熊猫优惠洛克财产,一种基于标签的数据选择方法,允许您根据多个条件选择数据。

本教程旨在指导您在多种条件下使用 Pandas loc 函数。

 

 

了解多个条件的逻辑运算符

Python 中的逻辑运算符,例如“and”、“or”和“not”,允许组合简单的条件以形成复杂的条件语句。

逻辑运算符

  • ‘and’:如果两个条件都为真,则返回 True
  • ‘or’:如果至少一个条件为真,则返回 True
  • ‘not’:如果条件为真则返回 False(反转条件)

这是一个快速浏览:


print(True and False)
print(True or False)
print(not True)  

Output:


False
True
False  

在上面的代码中,“and”运算符返回 False,因为两个条件(True 和 False)都不为 True。

“or”运算符返回 True,因为至少有一个条件(True 或 False)为 True。

最后,“not”运算符返回 False,因为条件为 True,而“not”则反转条件。

 

使用 AND 运算符 (&) 组合条件

现在让我们深入研究使用 AND 运算符组合条件,如下所示&在熊猫中。

我们将从一个简单的 DataFrame 示例开始:


import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'], 'Age': [20, 21, 19, 18], 'Grade': ['A', 'B', 'A', 'C']}
df = pd.DataFrame(data)
print(df)  

Output:


  Name  Age Grade
0  Tom   20     A
1 Nick   21     B
2 John   19     A
3  Tom   18     C  

在此数据框中,我们有“姓名”、“年龄”和“年级”作为列。

现在,假设您的任务是获取“年龄”> 19 且“年级”=“A”的行。操作方法如下:


print(df.loc[(df['Age'] > 19) & (df['Grade'] == 'A')])  

Output:


  Name  Age Grade
0  Tom   20     A  

使用loc函数和“与”运算符 (&),代码会获取满足两个条件的行:“年龄”> 19 且“年级”等于“A”。

 

使用 OR 运算符 (|) 组合条件

再次参考我们之前的 DataFrame,这次让我们获取“Age”> 19 或“Grade”=“A”的行。


print(df.loc[(df['Age'] > 19) | (df['Grade'] == 'A')])  

Output:


   Name  Age Grade
0   Tom   20     A
1  Nick   21     B
2  John   19     A  

在上面的代码中,我们使用了loc带有 OR 运算符的函数 (|)。这将返回至少满足以下条件之一的行:“年龄”> 19 或“年级”等于“A”。

 

使用带有 NOT 运算符 (~) 的多个条件

NOT 运算符表示为~在熊猫中。如果您想获得条件的相反结果,NOT 运算符非常有用。

坚持之前的 DataFrame,让我们获取“Grade”不是“A”的行。


print(df.loc[~(df['Grade'] == 'A')])  

Output:


   Name  Age Grade
1  Nick   21     B
3   Tom   18     C  

这段代码使用了loc带有 NOT 运算符的函数 (~) 返回“Grade”不是“A”的行。如您所见,第 0 行和第 2 行被排除在输出中,因为它们的“Grade”等于“A”。

 

组合两个以上的条件

让我们使用之前的 DataFrame 并获取“Age”大于 19、“Grade”为“A”、“Name”为“Tom”的行。


print(df.loc[(df['Age'] > 19) & (df['Grade'] == 'A') & (df['Name'] == 'Tom')])  

Output:


  Name  Age Grade
0  Tom   20     A  

在上面的代码中,我们扩展了条件loc函数使用三个条件而不是两个。

 

特定列的多个条件

让我们看看如何使用 Pandas 选择具有多个条件的特定列loc.

我们从前面的例子中获取数据:


print(df.loc[(df['Grade'] == 'A') & (df['Age'] > 19), 'Name'])  

Output:


0    Tom
Name: Name, dtype: object  

在代码片段中,我们使用了loc选择“Grade”等于“A”且“Age”大于 19 的所有行。

此外,通过附加'Name'在结束时loc函数时,它仅从满足条件的行中选择“名称”列。

 

选择具有多个条件的多列

让我们看看如何选择具有多个条件的多列loc.


print(df.loc[(df['Age'] > 19), ['Name', 'Grade']])  

Output:


   Name Grade
0  Tom     A
1 Nick    B  

在上面的代码中,我们使用“loc”来选择“Age”大于 19 的所有行。

此外,通过添加列表,['Name', 'Grade'],它仅从满足条件的行中选择“Name”和“Grade”列。

 

使用 loc 和多个条件处理空值

为了给您一个说明,让我们修改 DataFrame 以包含 null 值:


import numpy as np
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'], 'Age': [20, 21, 19, np.nan], 'Grade': ['A', 'B', 'A', 'C']}
df = pd.DataFrame(data)
print(df)  

Output:


  Name   Age Grade
0  Tom  20.0     A
1 Nick  21.0     B
2 John  19.0     A
3  Tom   NaN     C  

在这里,您会看到最后一个条目(“Tom”)的“Age”是 NaN(不是数字),表示空值或缺失值。

现在,让我们获取“Age”不为空且“Grade”等于“A”的行。


print(df.loc[(df['Grade'] == 'A') & (df['Age'].notna())])  

Output:


   Name   Age Grade
0   Tom  20.0     A
2  John  19.0     A  

这段代码使用了notna()函数结合loc和逻辑 AND 仅选择“Grade”为“A”且“Age”不为空的行。

 

将 loc 与日期/时间数据的多个条件结合使用

让我们从一个简单的 DataFrame 开始,其中日期/时间作为其中一列。


data = {'Date': pd.date_range(start='1/1/2020', end='1/10/2020'), 'Value': range(10)}
df = pd.DataFrame(data)

print(df)  

Output:


        Date  Value
0 2020-01-01      0
1 2020-01-02      1
2 2020-01-03      2
3 2020-01-04      3
4 2020-01-05      4
5 2020-01-06      5
6 2020-01-07      6
7 2020-01-08      7
8 2020-01-09      8
9 2020-01-10      9  

要选择“日期”晚于 2020 年 1 月 3 日且“值”大于 5 的所有行,可以使用以下代码:


print(df.loc[(df['Date'] > '2020-01-03') & (df['Value'] > 5)])  

Output:


        Date  Value
6 2020-01-07      6
7 2020-01-08      7
8 2020-01-09      8
9 2020-01-10      9  

The loc函数与逻辑 AND 运算符相结合,过滤 DataFrame 中“日期”在“2020-01-03”之后且“值”大于 5 的行。

 

将 loc 与数值数据的多个条件结合使用

让我们考虑一个简单的 DataFrame,其中有数值数据。


data = {'Column1': [15, 20, 35, 40, 55], 'Column2': [100, 200, 300, 400, 500]}
df = pd.DataFrame(data)

print(df)  

Output:


   Column1  Column2
0       15      100
1       20      200
2       35      300
3       40      400
4       55      500  

要选择“Column1”大于 20 且“Column2”小于 500 的行,可以使用以下代码:


print(df.loc[(df['Column1'] > 20) & (df['Column2'] < 500)])  

Output:


   Column1  Column2
2       35      300
3       40      400  

The loc该函数使用逻辑 AND 运算符 (&),过滤 DataFrame 中“Column1”大于 20 且“Column2”小于 500 的行。

 

将 loc 与多个条件结合使用用于分类数据

考虑这个数据框:


data = {'Name': ['Tom', 'Nick', 'John', 'Tom'], 'Color': ['Blue', 'Green', 'Red', 'Blue'], 'Number': [1, 2, 3, 4]}
df = pd.DataFrame(data)
print(df)  

Output:


   Name  Color  Number
0   Tom   Blue       1
1  Nick  Green       2
2  John    Red       3
3   Tom   Blue       4  

让我们显示“颜色”为“蓝色”且“数字”大于 1 的行。


print(df.loc[(df['Color'] == 'Blue') & (df['Number'] > 1)])  

Output:


  Name Color  Number
3  Tom  Blue       4  

在上面的代码中,loc与 AND 运算符相结合,过滤 DataFrame 中“颜色”为“蓝色”且“数字”大于 1 的行。

 

根据多种条件更新DataFrame

让我们回到我们的 DataFrame:


data = {'Name': ['Tom', 'Nick', 'John', 'Tom'], 'Age': [20, 21, 19, 18], 'Grade': ['A', 'B', 'A', 'C']}
df = pd.DataFrame(data)

print(df)  

Output:


  Name  Age Grade
0  Tom   20     A
1 Nick   21     B
2 John   19     A
3  Tom   18     C  

假设您想要将“年龄”> 19 岁的学生的“等级”从“B”更改为“A”。具体操作方法如下:


df.loc[(df['Age'] > 19) & (df['Grade'] == 'B'), 'Grade'] = 'A'
print(df)  

Output:


  Name  Age Grade
0  Tom   20     A
1 Nick   21     A
2 John   19     A
3  Tom   18     C  

在上面的代码中,loc选择了“年龄”> 19 且“年级”为“B”的行。然后它将“等级”更新为“A”。

 

现实世界的例子

回到我在埃及电信公司的日子,分析大型数据集是我工作的常规部分。

我们从众多客户那里收集了数百万个数据点,包括他们的通话记录、数据使用情况、充值模式和投诉日志。

有一次,我的任务是识别在过去六个月内使用超过 5GB 数据、拨打超过 1000 分钟通话以及至少收到 3 起投诉的用户。

通过使用熊猫loc有了多个条件,上面提到的任务就变成了几行代码的问题!


target_subscribers = df.loc[(df['Data Usage'] > 5) & (df['Call Minutes'] > 1000) & (df['Complaints'] >= 3)]  

当网络团队需要探索不同的阈值来识别潜在的服务改进领域时,这非常有用。

总而言之,使用 Pandasloc事实证明,具有多个条件的数据在许多数据分析操作中非常有价值,它允许您以多种高效的方式过滤、选择或更改数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Pandas loc 按多个条件选择数据 的相关文章

随机推荐

  • 使用 Python 和 ggplot 绘制数据图表

    在本课程中 您将学习如何使用ggplot在Python中使用创建数据可视化图形语法 图形语法是一种高级工具 可让您以高效且一致的方式创建数据图 它抽象了最底层的细节 让您专注于为数据创建有意义且美观的可视化效果 有几个 Python 包提供
  • MicroPython 入门(概述)

    您对物联网 家庭自动化和互联设备感兴趣吗 你有没有想过建造一把爆能枪 一把激光剑 甚至你自己的机器人会是什么样子 如果是这样 那么您很幸运 微Python可以帮助您完成所有这些事情以及更多 在本课程中 您将了解 这历史微Python的 这差
  • Jupyter 终端及更多

    Jupyter Notebooks 不仅可以让您启动笔记本 在本课程中 您将学习如何启动新终端以及如何在浏览器中创建文件夹或文件
  • 2021 年 8 月 11 日

    主持人大卫 阿莫斯回答会员的问题 本周 Real Python 社区经理 Andres Pineda 也加入了 David 的行列 在这次会议上 我们讨论了 Python 新闻和更新 如何开始使用 Python 进行日志记录 如何学习编写更
  • 适合 Python 程序员的 C

    目录 The C Preprocessor 包括 定义 undef if pragma 错误 Basic C Syntax for Python Programmers 一般的 if 语句 switch 语句 循环 功能 指针 弦乐 结构体
  • 关于约翰·斯特茨

    关于约翰 斯特茨 John 是一位狂热的 Python 爱好者 也是 Real Python 教程团队的成员 约翰的教程 Python 中的模字符串格式化 Python 中的递归 简介 Python 中的函数式编程 何时以及如何使用它 Py
  • pandas 排序方法入门

    有关这些视频中使用的 REPL 的更多信息 您可以查看蟒蛇以及真正的 Python 教程探索 bpython 具有类似 IDE 功能的 Python REPL
  • 漂亮的印花

    此外print Python 包括一个漂亮的印刷品方法 此方法对于以更易于阅读的格式输出有关对象的调试信息特别有用 gt gt gt gt gt gt from pprint import pprint gt gt gt data squa
  • Python 新闻:2021 年 12 月以来的新增内容

    目录 Python 指导委员会选举 Python 新版本 Python 3 6 生命周期结束 代码的出现 Python 的下一步是什么 In 2021 年 12 月 第四个Python指导委员会像往常一样 由新成员和回归成员组成 Pytho
  • 第 12 集:Python 中的网页抓取:工具、技术和合法性

    第 12 集 Python 中的网页抓取 工具 技术和合法性 真正的 Python 播客 2020年6月5日50公尺 RSS Apple Podcasts Google Podcasts Spotify More 播客瘾君子 灰蒙蒙 袖珍铸
  • 列表:有序和任意

    您已经了解了如何创建列表 在本课程中 您将了解到列表是有序的并且可以包含任意对象的集合 定义列表时使用的顺序在列表的生命周期内保持不变 包含相同元素但顺序不同的列表是不同的 gt gt gt gt gt gt a spam egg baco
  • 在“for”循环中使用 .append() 进行附加处理

    有关本课程所涵盖概念的更多信息 您可以查看 Python enumerate 简化需要计数器的循环 真正的Python文章 Python for 循环 确定迭代 真正的Python文章
  • 设计和指导:Python 中的 OOP(概述)

    编写优秀的面向对象代码不仅仅是如何编写 句法 知道何时和何时不使用它 以及指导原则 在后面面向对象设计将帮助您编写更好的代码 在本课程中 您将了解 中的面向对象方法Python 与其他语言 您的情况不应该使用Python 中的类 继承的替代
  • 使用 Sed 命令在 Linux 中追加文本

    Sed提供根据特定模式或条件将文本附加到文件中的行的能力 您可以使用a 命令输入sed在模式匹配后添加新行 让我们深入研究现实世界的示例 以了解如何有效地利用此功能 目录 hide 1 在匹配的模式后添加一行 2 在匹配的模式后追加多行 3
  • Linux Web 服务器 (Apache) 的安装、配置和故障排除

    在本教程中 我们将具体讨论 Linux Web 服务器或 Apache Web 服务器 以及如何安装和配置它以向其他人提供您的内容 Web 服务器是一个通过 HTTP 协议处理请求的系统 您向服务器请求一个文件 它会响应所请求的文件 这可能
  • 使用 Curl 命令的 RESTful API 交互

    主要用途之一curl与 RESTful API 进行交互 RESTful API 是许多现代 Web 应用程序和服务的支柱 在本教程中 您将学习如何使用 RESTful API 进行交互卷曲命令 获取数据 发布信息以及解析各种响应 目录 h
  • NumPy 数组重塑指南

    The NumPyPython 中的库提供了强大的功能来重塑数组的维度 这就是我们将在本教程中深入探讨的内容 在整个教程中 我们将介绍 NumPy 数组重塑的含义及其重要性 然后再深入研究如何重塑不同维度的数组的细节 在本教程结束时 您将熟
  • Python 分析(检测 CPU 和内存瓶颈)

    您是否一直在代码中处理包含大量数据的数据集 并且一旦执行代码 您就会发现代码需要很长时间才能产生最终输出 嗯 这可能会令人沮丧 您可能使用了正确的语法 并且逻辑也是正确的 然而 该代码会消耗大量 RAM 并且执行时间过长 这时您应该考虑优化
  • 使用 to_json 将 Python Pandas DataFrame 转换为 JSON

    The to json函数在转换时特别有用PandasDataFrame 到 JSON 文件 它允许您转换并返回可编写为 JSON 文件的可序列化对象 该函数具有多个参数 可提供 JSON JavaScript 对象表示法 输出的自定义 其
  • 使用 Pandas loc 按多个条件选择数据

    熊猫优惠洛克财产 一种基于标签的数据选择方法 允许您根据多个条件选择数据 本教程旨在指导您在多种条件下使用 Pandas loc 函数 目录 hide 1 了解多个条件的逻辑运算符 2 使用 AND 运算符 组合条件 3 使用 OR 运算符