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

布尔索引

布尔索引:在实际应用中,只要是通过比较运算返回的判断结果(一个布尔型Series),就可以进行布尔索引。

应用场景:

面对大型数据时,用于获取数据的行索引和列索引往往不确定,通常我们需要寻找满足或不满足特定计算或条件的值。这时候,我们就需要用到 布尔索引 来筛选出符合要求的数据。

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

先访问了 "cutdown_price" 这一列数据,然后就需要判断该列中哪些值大于0。
如果大于0,就把对应的那一行数据保留下来。

判断 "cutdown_price" 这一列数据中哪些值大于0,可以使用比较运算中的大于(>)来写一个条件表达式:data["cutdown_price"]>0。与我们之前学的数学操作类似,这时候该列的数据会逐个和0进行比较操作,每一行都会返回一个对应的布尔值,从而得到一个布尔型Series:

True表示该行的"cutdown_price"大于0;

False表示该行的"cutdown_price"小于等于0。

上面的图可以看到,"cutdown_price"这一列里,85647对应的数据是1000,大于0,所以返回的布尔值是True。

  1. 使用比较运算中的大于(>)来写一个条件表达式,判断一下data变量里,"cutdown_price"这一列哪些值大于0?

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

import pandas as pd

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

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

使用列索引筛选出"cutdown_price"这一列数据

同时使用比较运算判断这一列哪些值大于0

并使用print()将结果直接输出

print(data["cutdown_price"] > 0)

输出:

在得到了一个布尔型Series后,我们就可以把True对应位置的行保留下来,作为新的DataFrame返回。

接下来,我们来获取所有 "cutdown_price" 大于0的行数据。

要将所有返回为True的对应行数据保留下来,就需要用到布尔索引。将刚刚写的条件表达式传入DataFrame对象后的中括号里作为布尔索引即可。布尔索引会把判断结果为True的行数据直接返回,从而达到筛选数据的效果。

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 导入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的行 print(data[data["cutdown_price"]>0]) |
| |

从输出的内容可以看到,返回的DataFrame就是data变量里,所有"cutdown_price"这一列值里大于0的行数据。
这时的行索引index就类似于一个书签,用于标记位置,不影响内容。
根据行索引index,就能很快地知道原数据data变量里的第10行、第27行、第28行、......的cutdown_price都大于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的行 print(data[data["cutdown_price"]>0]) |
| |

代码具体解释:

|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|
| 要筛选的数据 data是需要进行筛选的DataFrame对象。 | print(data[data["cutdown_price"]>0]) |
| 第一个中括号 第一个中括号,也就是最外面的中括号,表示对变量data进行索引。 | print(data[data["cutdown_price"]>0]) |
| 条件表达式 中括号里的内容是通过一个条件表达式,来判断"cutdown_price"这一列值里是否大于0。 | pandas通过这个条件表达式得到一个布尔型Series,再通过这个Series来索引数据。 |
| 访问列数据 按data["columns"]的形式访问"cutdown_price"这一列数据。 | |
| 比较运算 通过大于(>)来判断"cutdown_price"列的数据是否大于0。 | |

比如,常见的比较运算有:==、>、<、>=、<=、!=(不等于),以及接下来会学的一些逻辑判断。

相关推荐
牛奶咖啡138 小时前
关系数据库MySQL的常用基础命令详解实战
数据库·mysql·本地远程连接到mysql·创建mysql用户和密码·修改mysql用户的密码·设置mysql密码的使用期限·设置和移除mysql用户的权限
编程武士8 小时前
从50ms到30ms:YOLOv10部署中图像预处理的性能优化实践
人工智能·python·yolo·性能优化
max5006009 小时前
基于Meta Llama的二语习得学习者行为预测计算模型
人工智能·算法·机器学习·分类·数据挖掘·llama
计算机编程小央姐9 小时前
【Spark+Hive+hadoop】基于spark+hadoop基于大数据的人口普查收入数据分析与可视化系统
大数据·hadoop·数据挖掘·数据分析·spark·课程设计
ANYOLY9 小时前
Redis 面试宝典
数据库·redis·面试
鲲志说9 小时前
数据洪流时代,如何挑选一款面向未来的时序数据库?IoTDB 的答案
大数据·数据库·apache·时序数据库·iotdb
没有bug.的程序员9 小时前
MVCC(多版本并发控制):InnoDB 高并发的核心技术
java·大数据·数据库·mysql·mvcc
月疯10 小时前
OPENCV摄像头读取视频
人工智能·opencv·音视频
极客天成ScaleFlash10 小时前
极客天成让统一存储从云原生‘进化’到 AI 原生: 不是版本升级,而是基因重组
人工智能·云原生
王哥儿聊AI10 小时前
Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
人工智能·算法·安全·机器学习·音视频·软件工程