【Python】数据分析+数据挖掘——探索Pandas中的数据筛选

news2024/9/28 9:29:57

1. 前言

当涉及数据处理和分析时,Pandas是Python编程语言中最强大、灵活且广泛使用的工具之一。Pandas提供了丰富的功能和方法,使得数据的选择、筛选和处理变得简单而高效。在本博客中,我们将重点介绍Pandas中数据筛选的关键知识点,包括条件索引、逻辑操作符、query()方法以及其他一些常用技巧~


2. 筛选

在Python和Pandas库中,索引是一种用于标识和访问数据的重要概念。索引可以是整数、标签、日期等类型,它允许我们按照指定的标记来查找、选择和操作数据。本文重点介绍的是Pandas中的筛选操作,我们先来简单回顾一下Python中一些筛选的相关操作。

在Python中列表、元组、字符串、字典都是支持索引的数据结构。索引从0开始,表示数据元素在序列中的位置。



例如,对于列表可以通过list[0]来访问列表的一个元素

In[0]:

list_filter = [1,2,3,4,5]
print(list_filter[0])
print(list_filter[1])

out[0]:

1
2


对于字符串,也可以使用索引来访问单个字符

In[1]:

string_filter = "hello"
print(string_filter[0])
print(string_filter[1])

out[1]:

h
e


对于元组亦是如此

In[2]:

tuple_filter = (1, 2, 3, 4)
print(tuple_filter[0])
print(tuple_filter[2])

out[2]:

1
3


对于字典则是可以通过’‘键’'来索引字典中的值

In[3]:

dict_filter = {'1': 'one', '2': 'two', '3': 'three'}
print(dict_filter['1']) 
print(dict_filter['2']) 

out[3]:

one
two

除此之外你也可以通过切片索引、负数索引来进行筛选操作在此就不在赘述了


案例数据表university_rank.csv

在这里插入图片描述

2.1 整数位置索引筛选

df.iloc是Pandas中用于整数位置索引(Integer Location Indexing)的一种属性,用于访问DataFrame或Series中的数据。iloc允许你使用整数位置来选择特定的行和列,类似于Python中的列表索引。



语法 df.iloc[row_index, column_index] 其中的row_index和column_index可以是单个整数、切片或者列表

我们先来尝试一下整行筛选

df.iloc[<start_loc>:<end_loc>],这里需要注意的是end_loc是取不到的,比如df.iloc[0:2],从0开始,只能取到0,1。

In[4]:

import pandas as pd
df = pd.read_csv("university_rank.csv") # 读取案例数据表
df # 展示数据表,跟print一样的作用

out[4]:

大学名称排名地区学科领域排名依据
0哈佛大学1北美工程学术声誉
1牛津大学2欧洲医学科研产出
2北京大学3亚洲商学国际影响力
3悉尼大学4大洋洲计算机科学教学质量
4圣保罗大学5南美艺术学生满意度
..................
95圣保罗国立大学96南美计算机科学研究生录取率
96约翰内斯堡大学97非洲环境科学学术声誉
97麦吉尔大学98北美艺术学生满意度
98伦敦政治经济学院99欧洲法律国际影响力
99东京大学100亚洲教育毕业生就业率

100 rows × 5 columns



In[5]:

df.iloc[0:2] # 对案例数据表进行整行筛选

out[5]:

大学名称排名地区学科领域排名依据
0哈佛大学1北美工程学术声誉
1牛津大学2欧洲医学科研产出


行能切边,那列能不能切片呢?答案当然是能,只需要用’ , '来分割行列之间的索引即可。

In[6]:

df.iloc[0:2, 0:3]

out[6]:

大学名称排名地区
0哈佛大学1北美
1牛津大学2欧洲


补充:我们知道在Pandas中不仅有DataFrame还有Series,在Series中我们也可以使用df.iloc[index]来进行索引,其中index可以是单个整数、切片或者列表

In[7]:

data = [1, 2, 3, 4, 5]
series = pd.Series(data) # 创建一个Series类型的数据

# 使用整数位置索引访问数据
print(series.iloc[0])
print(series.iloc[1:3])

out[7]:

1
2,3

2.2 标签索引筛选

df.loc是Pandas中用于标签索引的一种属性,用于访问DataFrame或Series中的数据。loc允许你使用标签来选择特定的行和列,这使得索引更加灵活,可以根据标签选择数据,也可以使用条件来筛选。

语法 df.loc[row_label, column_label] 其中的row_label和column_label可以是单个整数、切片或者列表

我们先来尝试一下整行筛选,df.loc 与绝对值筛选的区别是,若使用df.loc[0:4],那么将会筛选从索引为0,到索引为4的所有列

In[8]:

df.loc[0:4]

out[8]:

大学名称排名地区学科领域排名依据
0哈佛大学1北美工程学术声誉
1牛津大学2欧洲医学科研产出
2北京大学3亚洲商学国际影响力
3悉尼大学4大洋洲计算机科学教学质量
4圣保罗大学5南美艺术学生满意度


如果不想要[0:4]中间的部分,只想要index=0 和 index=4的行,给它们中间的’:‘换成’,'加一个列表嵌套就行,简单来说就是使用标签列表来筛选

In[9]:

df.loc[[0, 4]]

out[9]:

大学名称排名地区学科领域排名依据
0哈佛大学1北美工程学术声誉
4圣保罗大学5南美艺术学生满意度

在此就不再赘述Series的df.loc了基本用法与上类似,不过是从多维转为了一维而已。


2.3 多重索引筛选

df.xs是Pandas中的一种方法,用于在DataFrame中根据指定的标签或位置(行或列)获取跨越多个层次的数据。它主要用于处理具有多层索引的DataFrame

df.xs(
	# 要获取的行或列的标签或位置
    key, 
    # 可选参数,用于指定获取行还是列。默认为行,也可以设置为1(列)
    axis = 0,
    # 可选参数,用于指定多层索引的级别。只在有层次化索引时才需要设置
    level, 
    # 可选参数,指定是否丢弃返回结果中的索引级别,默认为True
    drop_level = True
)

In[10]:

df = pd.read_csv("university_rank.csv", index_col=["排名", "地区"]) # 读取案例数据表并设置双重索引
df

out[10]:

大学名称学科领域排名依据
排名地区
1北美哈佛大学工程学术声誉
2欧洲牛津大学医学科研产出
3亚洲北京大学商学国际影响力
4大洋洲悉尼大学计算机科学教学质量
5南美圣保罗大学艺术学生满意度
...............
96南美圣保罗国立大学计算机科学研究生录取率
97非洲约翰内斯堡大学环境科学学术声誉
98北美麦吉尔大学艺术学生满意度
99欧洲伦敦政治经济学院法律国际影响力
100亚洲东京大学教育毕业生就业率

100 rows × 3 columns



In[11]:

df.xs('北美', level=1)

out[11]:

大学名称学科领域排名依据
排名
1哈佛大学工程学术声誉
7麦吉尔大学教育校友网络
11斯坦福大学工程研究成果
17麦吉尔大学教育毕业生就业率
21加州理工学院工程学术声誉
28麦吉尔大学医学教学质量
32斯坦福大学经济学校友网络
38麦吉尔大学艺术学生满意度
42加州理工学院社会科学校友网络
48麦吉尔大学艺术学生满意度
52斯坦福大学社会科学校友网络
58麦吉尔大学艺术学生满意度
62加州理工学院社会科学校友网络
68麦吉尔大学艺术学生满意度
72斯坦福大学社会科学校友网络
78麦吉尔大学艺术学生满意度
82加州理工学院社会科学校友网络
88麦吉尔大学艺术学生满意度
92斯坦福大学社会科学校友网络
98麦吉尔大学艺术学生满意度

2.4 多条件索引筛选

在Pandas中,你可以使用多个条件来进行多条件索引。有几种方法可以实现多条件索引,其中一些常用的方法如下

  • 使用&|操作符: 你可以使用&表示"与"条件,|表示"或"条件。通过将条件括在圆括号中,可以确保优先级正确
  • 使用query()方法: query()方法允许你使用字符串表示多个条件,更加直观和简洁
  • 使用isin()方法: isin()方法允许你检查某一列是否包含指定的多个值,然后将条件应用于DataFrame

2.4.1 使用&|操作符

语法df[(option_one) &/| (option_two)...] 其中option_one和option_two都是筛选的条件,结果取决于中间的连接符

In[12]:

df = pd.read_csv("university_rank.csv") # 读取一下案例数据表
df

out[12]:

大学名称排名地区学科领域排名依据
0哈佛大学1北美工程学术声誉
1牛津大学2欧洲医学科研产出
2北京大学3亚洲商学国际影响力
3悉尼大学4大洋洲计算机科学教学质量
4圣保罗大学5南美艺术学生满意度
..................
95圣保罗国立大学96南美计算机科学研究生录取率
96约翰内斯堡大学97非洲环境科学学术声誉
97麦吉尔大学98北美艺术学生满意度
98伦敦政治经济学院99欧洲法律国际影响力
99东京大学100亚洲教育毕业生就业率

100 rows × 5 columns



In[13]:

df[(df.排名 >= 6) & (df.排名 <= 10)] # 使用多条件筛选

out[13]:

大学名称排名地区学科领域排名依据
5约翰内斯堡大学6非洲法律毕业生就业率
6麦吉尔大学7北美教育校友网络
7伦敦政治经济学院8欧洲经济学国际化程度
8东京大学9亚洲社会科学研究生录取率
9澳大利亚国立大学10大洋洲环境科学科研经费

2.4.2 query()方法

目前较常用的筛选语句,query()方法是Pandas中的一种数据筛选方法,它允许你使用字符串表达式来选择DataFrame中满足特定条件的数据。query()方法的设计灵感来自于SQL语言的查询语法,它能够简化复杂的条件筛选,并且能够处理大部分的数据选择需求。

语法:df.query(expr, inplace=False)

df.query(
    # 类sql语句
    expr
    # 是否在原df上修改,默认为False
    inplace = False
)

Tip:在expr语句中可以使用’@'来引用外部变量

In[14]:

df = pd.read_csv("university_rank.csv") # 读取一下案例数据表
expr = "排名 > 9 and 排名 < 16 and 地区 == '亚洲' " # 使用类sql语句多条件筛选DataFrame表
df.query(expr) # 查看使用query()方法查询的结果

out[14]:

大学名称排名地区学科领域排名依据
12清华大学13亚洲商学校友网络


In[15]:

limit = 5 # 设置一个外部变量
expr = "排名 > @limit and 排名 < 50 and 地区 == '亚洲' " # 在expr参数里面应用外部变量
df.query(expr) # 查看使用query()方法查询的结果

out[15]:

大学名称排名地区学科领域排名依据
8东京大学9亚洲社会科学研究生录取率
12清华大学13亚洲商学校友网络
18东京大学19亚洲社会科学国际化程度
22香港大学23亚洲商学国际影响力
29东京大学30亚洲艺术学生满意度
33清华大学34亚洲医学学术声誉
39东京大学40亚洲教育毕业生就业率
43香港大学44亚洲工程教学质量

若想对数量进行控制,那么也可以使用.head()方法或者.tail()方法来进行嵌套查询

In[16]:

df.query(expr).head(3)

out[16]:

大学名称排名地区学科领域排名依据
8东京大学9亚洲社会科学研究生录取率
12清华大学13亚洲商学校友网络
18东京大学19亚洲社会科学国际化程度

2.4.3 isin()方法(布尔索引筛选)

isin()是Pandas中的一种方法,用于检查DataFrame或Series中的元素是否包含在指定的列表、集合或Series中。isin()方法返回一个布尔值的Series,其中元素为True表示对应的元素在指定的集合中,False表示不在其中。

语法df.col_name.isin(values)或者df.isin(values) 该方法会返回一个bool数列,其中values一般为一个列表、集合或Series,用于指定待检查的元素集合。

In[17]:

df = pd.read_csv("university_rank.csv") # 读取一下案例数据表
df # 展示案例数据表

out[17]:

大学名称排名地区学科领域排名依据
0哈佛大学1北美工程学术声誉
1牛津大学2欧洲医学科研产出
2北京大学3亚洲商学国际影响力
3悉尼大学4大洋洲计算机科学教学质量
4圣保罗大学5南美艺术学生满意度
..................
95圣保罗国立大学96南美计算机科学研究生录取率
96约翰内斯堡大学97非洲环境科学学术声誉
97麦吉尔大学98北美艺术学生满意度
98伦敦政治经济学院99欧洲法律国际影响力
99东京大学100亚洲教育毕业生就业率

100 rows × 5 columns



In[18]:

df.排名.isin([1, 5, 6])

out[18]:

0      True
1     False
2     False
3     False
4      True
      ...  
95    False
96    False
97    False
98    False
99    False
Name: 排名, Length: 100, dtype: bool


现在返回是一个bool列表,想要获取到筛选后的数据在外面套上一层df就行了

In[19]:

df[df.排名.isin([1, 5, 6])]

out[19]:

大学名称排名地区学科领域排名依据
0哈佛大学1北美工程学术声誉
4圣保罗大学5南美艺术学生满意度
5约翰内斯堡大学6非洲法律毕业生就业率

Tips

  • 在Pandas中可以使用~进行反向筛选,即剔除满足条件的。
  • 也可以使用drop()方法来删除满足的条件列和行
  • 在进行范围筛选的使用也可以使用between()方法

结束语

如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/808851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

x86架构ubuntu22用docker部署zsnes

0. 环境 x86 ubuntu22 1. 安装docker $ sudo apt remove docker docker-engine docker $ sudo apt update $ sudo apt install -y apt-transport-https ca-certificates curl software-properties-common$ curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg …

HiveSQL SparkSQL中常用知识点记录

目录 0. 相关文章链接 1. hive中多表full join主键重复问题 2. Hive中选出最新一个分区中新增和变化的数据 3. Hive中使用sort_array函数解决collet_list列表排序混乱问题 4. SQL中对小数位数很多的数值转换成文本的时候不使用科学计数法 5. HiveSQL & SparkSQL中炸裂…

leetcode 面试题 01.03. URL化

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;面试题 01.03. URL化 思路&#xff1a; 计算出空格的个数&#xff0c;我们可以知道最后一个字符的位置 endPos&#xff0c;再从后 end 向前遍历若不是空格正常拷贝&#xff0c;是空格则替换成 %20&#xff0c;最终当空格…

Linux系统编程之进程控制(上)

一、进程标识 1.pid 每个进程都有非负整数表示的唯一进程ID&#xff0c;即pid&#xff0c;其类型为pid_t类型。可用ps命令查看当前所有进程的信息&#xff0c;该命令可以加选项&#xff0c;一般使用ps -ef或ps axf(打印进程树)&#xff0c;查看当前系统所有进程的信息。需要注…

【Rust教程 | 基础系列 | Rust初相识】Rust简介与环境配置

教程目录 前言一&#xff0c;Rust简介1&#xff0c;Rust的历史2&#xff0c;Rust的特性3&#xff0c;为什么选择Rust 二&#xff0c; Rust环境配置1&#xff0c;windows11安装2&#xff0c;Linux安装 三&#xff0c;安装IDE 前言 Rust是一种系统编程语言&#xff0c;专注于速度…

【深度学习】以图搜索- 2021sota repVgg来抽取向量 + facebook的faiss的做特征检索, 从环境搭建到运行案例从0到1

文章目录 前言安装小试牛刀用repVgg抽取向量构建Faiss索引进行相似性搜索项目延伸总结 前言 Faiss的全称是Facebook AI Similarity Search。 这是一个开源库&#xff0c;针对高维空间中的海量数据&#xff0c;提供了高效且可靠的检索方法。 暴力检索耗时巨大&#xff0c;对于…

Flowable-任务-用户任务

定义 顾名思义&#xff0c;用户任务是需要人工参与处理的。当流程执行到用户任务节点时&#xff0c;流程引擎会给指指定的用户&#xff08;办理人或候选人&#xff09;或一组用户&#xff08;候选组&#xff09;创建待处理的任务项&#xff0c;等待用户的处理。 用户任务的参与…

HTML一些基础知识

1、Web标准&#xff1a;主要包含结构、表现、行为。结构用于对网页元素进行整理和分类&#xff0c;主要指HTML。表现用于设置网页元素的板式、颜色、大小等外观样式&#xff0c;主要指的是CSS。行为主要指的是网页模型的定义以及交互的编写&#xff0c;主要是js文件。 Html相当…

AddForce

ForceMode&#xff1a; Force&#xff1a;关注的是力整体 Impulse&#xff1a;关注的是冲量&#xff0c;与质量相关 VelocityChange&#xff1a;关注的是速度&#xff0c;与质量无关 Acceleration&#xff1a;关注的是加速度&#xff0c;与质量无关 public void AddForce…

前后端分离实现博客系统

文章目录 博客系统前言1. 前端1.1 登陆页面1.2 博客列表页面1.3 博客详情页面1.4 博客编辑页面 2. 后端2.1 项目部署2.1.1 创建maven项目2.1.2 引入依赖2.1.3 创建目录结构2.1.4 部署程序 2.2 逻辑设计2.2.1 数据库设计2.2.2 实体类设计2.2.3 Dao层设计2.2.3.1 BlogDao 2.2.4 D…

Intel RealSense D455(D400系列) Linux-ROS 安装配置(亲测可用)

硬件&#xff1a;Intel RealSense D455 系统&#xff1a;Ubuntu 18.04 Part_1: 安装librealsense SDK2.0 1.1 注册密钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE或者 sudo apt-key adv --keyserver hkp:/…

Mysql定时删除表数据

由于用户环境有张日志表每天程序都在狂插数据&#xff0c;导致不到一个月时间&#xff0c;这张日志表就高达200多万条记录&#xff0c;但是日志刷新较快&#xff0c;里面很多日志没什么作用&#xff0c;就写了个定时器&#xff0c;定期删除这张表的数据。 首先查看mysql是否开启…

【Linux】进程间通信——system V共享内存 | 消息队列 | 信号量

文章目录 一、system V共享内存1. 共享内存的原理2. 共享内存相关函数3. 共享内存实现通信4. 共享内存的特点 二、system V消息队列&#xff08;了解&#xff09;三、system V信号量&#xff08;信号量&#xff09; 一、system V共享内存 1. 共享内存的原理 共享内存是一种在…

自动化测试Junit(测试系列8)

目录 前言&#xff1a; 1.什么是Junit 2.Junit相关的技术 2.1注解 2.1.1Test 2.1.2Disable 2.1.3BeforeAll和AfterAll 2.1.4BeforeEach和AfterEach 2.2参数化 2.2.1单参数 2.2.2多参数 2.2.2.1CSV获取参数 2.2.2.2方法获取参数 2.3测试套件 2.3.1通过class运行测…

Java工程师研学之路【002Java基础语法上】

知识体系&#xff08;Knowledge system&#xff09; 练习&#xff08;practice&#xff09; 要求&#xff1a;从控制台输入两个数字&#xff0c;然后输出两个数字的求和结果。 import java.util.Scanner; public class HelloJava {public static void sum(){System.out.print…

kafka集群搭建(Linux环境)

zookeeper搭建&#xff0c;可以搭建集群&#xff0c;也可以单机&#xff08;本地学习&#xff0c;没必要搭建zookeeper集群&#xff0c;单机完全够用了&#xff0c;主要学习的是kafka&#xff09; 1. 首先官网下载zookeeper&#xff1a;Apache ZooKeeper 2. 下载好之后上传到…

以数据要素为支点,兴业银行撬动企业“技术杠杆”

文 | 螳螂观察 作者 | 李永华 推荐理财产品&#xff0c;恰好符合客户能承受的风险水平和想要的收益率水平&#xff0c;在资金投入上也契合客户当下的财务安排&#xff0c;于是顺利成交&#xff1b; 为客户办理的信用卡&#xff0c;优惠的场景方向与客户常常消费的领域大体一…

RWEQ模型教程

详情点击链接&#xff1a;基于“RWEQ”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践应用及SCI论文撰写 前沿 土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的…

U盘安装CentOS7.9出错:进入 dracut问题和解决方法

U盘安装CentOS7.9出错&#xff1a;进入 dracut问题和解决方法 原因&#xff1a;U盘名称未识别&#xff0c; 解决&#xff1a;进入启动界面&#xff0c;按e进入编辑界面 修改&#xff1a; vmlinuz initrdinitrd.img inst.stage2hd:LABELCentOS\x207\x20x86_64.check quiet 为 …

前端框架学习-Vue(二)

最近在学习Vue框架&#xff0c;Vue中的内容很多。相当于把之前后端的MVC&#xff0c;V层转移到前端来编写和部署。下面是学习Vue时的大纲。 Vue生命周期是Vue应用的生命周期Vue脚手架&#xff0c;即vue-cli&#xff0c;使用node.js 来创建和启动vue项目Vue组件知识&#xff0c;…