【数据分析】数据筛选(布尔索引:多个判断条件)

news/2025/3/20 8:47:12/

pandas模块中,逻辑运算符有以下几种:

1.&表示并且

2.|表示或者

3.~表示非

1. &(并且)运算符

当且仅当运算符两边的布尔值均为 True 时,运算结果才为 True,其他情况为 False

a = True

b = True

c = False

print(a & b)  # 输出: True

print(a & c)  # 输出: False

print(b & c)  # 输出: False

Pandas中使用 & 进行多条件筛选

import pandas as pd

# 创建一个示例DataFrame

data = pd.DataFrame({

    'A': [1, 2, 3, 4],

    'B': [4, 3, 2, 1]

})

# 筛选出 A 列大于 1 并且 B 列小于 4 的行

filtered_data = data[(data['A'] > 1) & (data['B'] < 4)]

print(filtered_data)

2. |(或者)运算符

当运算符两边的布尔值中至少有一个为 True 时,运算结果就为 True,仅当两边的布尔值都是 False 时结果才为 False

a = True

b = False

c = False

print(a | b)  # 输出: True

print(b | c)  # 输出: False

print(a | c)  # 输出: True

Pandas中使用 | 进行多条件筛选:

import pandas as pd

# 创建一个示例DataFrame

data = pd.DataFrame({

    'A': [1, 2, 3, 4],

    'B': [4, 3, 2, 1]

})

# 筛选出 A 列大于 2 或者 B 列小于 2 的行

filtered_data = data[(data['A'] > 2) | (data['B'] < 2)]

print(filtered_data)

3. ~(非)运算符

仅有一个布尔值参与运算,运算结果为对这个布尔值取反,即 True 变为 FalseFalse 变为 True

a = True

b = False

print(~a)  # 输出: False

print(~b)  # 输出: True

Pandas中使用 ~ 进行布尔索引的取反操作:

import pandas as pd

# 创建一个示例DataFrame

data = pd.DataFrame({

    'A': [1, 2, 3, 4],

    'B': [4, 3, 2, 1]

})

# 筛选出 A 列不大于 2 的行

filtered_data = data[~(data['A'] > 2)]

print(filtered_data)

简单解释:

这一行代码的功能是使用布尔索引结合取反运算符 `~`,从 `data` 数据框中筛选出 `A` 列中不大于 `2` 的行。我们来详细解析它的工作方式:

代码总结:

import pandas as pd

# 创建一个示例DataFrame

data = pd.DataFrame({

    'A': [1, 2, 3, 4],

    'B': [4, 3, 2, 1]

})

筛选出 A 列不大于 2 的行

filtered_data = data[~(data['A'] > 2)]

# 打印筛选结果

print(filtered_data)

运行结果:

   A  B

0  1  4

1  2  3

通过 `~` 运算符,可以轻松地实现条件筛选的取反操作。

总结:

1.&(并且):运算符两边的布尔值均为True时,运算结果才为True,其他情况为False。
2.|(或者):运算符两边的布尔值至少有一个为True时运算结果就为True,仅当两边的布尔值都是False 时结果才为False。
3.~(非):仅有一个布尔值参与运算,运算结果为对这个布尔值取反。

让我们来思考以下例子:
假设在读取电商数据时,我们想要输出所有 "cutdown_price"大于0 和 "post_fee"大于0 的行,该怎么做呢?

接下来,要同时输出 "cutdown_price"大于0 和 "post_fee"大于0的行数据,就需要在一个索引中,使用 & 来连接对应的两个判断条件。

注意:当有多个判断条件时,每一个判断条件都需要用小括号( )括起来。

这时,同时满足这两个判断的行数据就会被筛选出来

# 导入pandas模块,并以"pd"为该模块的简写

import pandas as pd

# 使用pd.read_csv() 函数读取路径为 "/Users/yequ/电商数据清洗.csv" 的CSV文件,并将结果赋值给变量data

data = pd.read_csv("/Users/yequ/电商数据清洗.csv")

# 使用print()和布尔索引

# 输出"cutdown_price"这一列值里大于0

# 和"post_fee"这一列值里大于0的行

print(data[(data["cutdown_price"]>0) & (data["post_fee"]>0)])

代码具体解释:

要筛选的数据

data是需要进行筛选的DataFrame对象。

print(data[(data["cutdown_price"]>0) & (data["post_fee"]>0)])

第一个中括号

第一个中括号,也就是最外面的中括号,表示对变量data进行索引。

print(data[(data["cutdown_price"]>0) & (data["post_fee"]>0)])

条件表达式

中括号里的内容是一个条件表达式,用来判断cutdown_price"这一列值里是否大于0和"post_fee"这一列值是否大于0。
pandas通过这个条件表达式得到一个布尔型Series,再通过这个Series来索引数据。

print(data[(data["cutdown_price"]>0) & (data["post_fee"]>0)])

第一个判断条件

中括号中的第一个小括号里是第一个判断条件:判断"cutdown_price"这一列数据是否大于0。

第二个判断条件

中括号中的第二个小括号里是第二个判断条件:判断"post_fee"这一列数据是否大于0。

总结:当有多个判断条件时,每一个判断条件都需要用小括号( )括起来。

总结:


http://www.ppmy.cn/news/1580554.html

相关文章

【go】如何处理可选配置

问题背景&#xff1a; 在设计API 时&#xff0c;如何处理可选配置&#xff1f; 1. 配置结构体 好处&#xff1a;解决兼容性&#xff0c;但问题是0值&#xff0c;和可读性差 如何解决0值&#xff1f; ——使用指针&#xff0c;将nil和类型0值做区分 但是入参包含结构体&#x…

计算机考研-数据结构2.2

顺序表的查找 各位同学大家好, 在这个小节中, 我们会学习顺序表的查找操作怎么实现, 那分为两种查找, 一种是按位查找, 一种是按值查找, 那首先来看按位查找怎么实现 对一个线性表进行按位查找, 就是要从这个线性表l当中, 取得第二个元素, 那如果这个线性表示用顺序表的方式实…

硬件驱动——51单片机:独立按键、中断、定时器/计数器

目录 一、独立按键 1.原理 2.封装函数 3.按键控制点灯 数码管 二、中断 1.原理 2.步骤 3.中断寄存器IE 4.控制寄存器TCON 5.打开外部中断0和1 三、定时器/计数器 1.原理 2.控制寄存器TCON 3.工作模式寄存器TMOD 4.按键控制频率的动态闪烁 一、独立按键 1…

Oracle数据库与MySQL数据库的全面对比分析

文章目录 **一、概述与定位****1. Oracle数据库****2. MySQL数据库** **二、架构设计对比****1. 存储引擎** **三、功能特性对比****1. 数据类型****2. 事务支持** **四、性能优化对比****1. 查询优化****2. 分区表** **五、安全性对比****1. 数据加密****2. 权限管理** **六、…

华为中小型企业项目案例

实验目的(1) 熟悉华为交换机和路由器的应用场景 (2) 掌握华为交换机和路由器的配置方法 实验拓扑实验拓扑如图所示。 华为中小型企业项目案例拓扑图 实验配置市场部和技术部的配置创建VLANLSW1的配置 [LSW1]vlan batch 10 20 [LSW1]q…

数据结构之链表(双链表)

目录 一、双向带头循环链表 概念 二、哨兵位的头节点 优点&#xff1a; 头节点的初始化 三、带头双向链表的实现 1.双链表的销毁 2.双链表的打印 3.双链表的尾插和头插 尾插&#xff1a; 头插&#xff1a; 4.双链表的尾删和头删 尾删&#xff1a; 头删&#xff1a; …

企业数通网络解决方案全面详解

随着企业数字化转型的快速发展&#xff0c;企业的网络基础设施逐渐成为支撑数字化转型的重要基石。企业数通网络不仅仅是企业内部通讯的通道&#xff0c;更是连接云端与终端、实现数据交互与业务智能的桥梁。本文将从园区网络、WLAN网络、数据中心网络和广域网络四个方面&#…

DNS解析查询工具

dig命令 1 常用命令 命令&#xff1a;dig 您的域名&#xff08;示例&#xff1a;dig www.baidu.com&#xff09; 2、根据解析记录查询&#xff0c;比如MX&#xff0c;CNAME&#xff0c;NS&#xff0c;PTR等&#xff0c;只需将类型加在命令后面即可。 示例&#xff1a;dig bai…