前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >pandas | 如何在DataFrame中通过索引高效获取数据?

pandas | 如何在DataFrame中通过索引高效获取数据?

作者头像
TechFlow-承志
发布于 2020-07-10 10:06:55
发布于 2020-07-10 10:06:55
14.3K00
代码可运行
举报
文章被收录于专栏:TechFlowTechFlow
运行总次数:0
代码可运行

今天是pandas数据处理专题第三篇文章,我们来聊聊DataFrame中的索引。

上篇文章当中我们简单介绍了一下DataFrame这个数据结构的一些常见的用法,从整体上大概了解了一下这个数据结构。今天这一篇我们将会深入其中索引相关的应用方法,了解一下DataFrame的索引机制和使用方法。

数据准备

上一篇文章当中我们了解了DataFrame可以看成是一系列Series组合的dict,所以我们想要查询表中的某一列,也就是查询某一个Series,我们只需要像是dict一样传入key值就可以查找了。但是,如果我们想要查找某一行应该怎么办?难道手动去遍历每一列么?这显然是不现实的。

所以DataFrame当中也为我们封装了现成的行索引的方法,行索引的方法一共有两个,分别是loc,iloc。这两种方法都可以查询某一行,只是查询的参数不同,本质上没有高下之分,大家可以自由选择。

首先,我们还是用上次的方法来创建一个DataFrame用来测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = {'name': ['Bob', 'Alice', 'Cindy', 'Justin', 'Jack'], 'score': [199, 299, 322, 212, 311], 'gender': ['M', 'F', 'F', 'M', 'M']}

df = pd.DataFrame(data)

loc

首先我们来介绍loc,loc方法可以根据传入的行索引查找对应的行数据。注意,这里说的是行索引,而不是行号,它们之间是有区分的。行索引其实对应于Series当中的Index,也就是对应Series中的索引。所以我们一般把行索引称为Index,而把列索引称为columns。

我们在之前的文章当中了解过,对于Series来说,它的Index可以不必是整数,也可以拥有重复元素。当然如果我们不指定的话,它会和行号一样,都是整数:

我们可以手动修改df的index,来看看当行索引不是整数的时候,是不是也一样生效。

可以明显看出来是生效的,而且我们也可以传入一个索引数组来查询多行

不仅如此,loc方法也是支持切片的,也就是说虽然我们传进的是一个字符串,但是它在原数据当中是对应了一个位置的。我们使用切片,pandas会自动替我们完成索引对应位置的映射。

但是索引对应的切片出来的结果是闭区间,这一点和Python通常的切片用法不同,需要当心。

另外,loc是支持二维索引的,也就是说我们不但可以指定行索引,还可以在此基础上指定列。说白了我们可以选择我们想要的行中的字段。

列索引也可以切片,并且可以组合在一起切片:

iloc

iloc从名字上来看就知道用法应该和loc不会差太大,实际上也的确如此。iloc的用法几乎和loc完全一样,唯一不同的是,iloc接收的不是index索引而是行号。我们可以通过行号来查找我们想要的行,既然是行号,也就说明了固定死了我们传入的参数必须是整数。

同样iloc也支持传入多个行号。

iloc也支持二维索引,但是对于列,我们也必须传入整数,也就是这个列对应的列号。

和loc不同,iloc的切片也是左闭右开。

我们在使用当中往往会觉得不方便,因为我们往往是知道我们需要的行号和列名。也就是知道一个索引知道一个位置,而不是两个位置或者是两个索引,所以使用loc也不方便使用iloc也不方便。这个时候可以取巧,我们可以通过iloc找出对应的行之后,再通过列索引的方式去查询列

这里我们在iloc之后又加了一个方括号,这其实不是固定的用法,而是两个语句。先是iloc查询行之后,再对这些行组成的新的DataFrame进行列索引。

但如果是通过索引来查找对应的若干行的话,其实也可以不用使用iloc,我们可以直接在df后面加上方括号来查询,一样可以得到结果。

但是这种方式有一个限制,就是后面只能传入一个切片,而不能是一个整数。比如我想要单独查询第2行,我们通过df[2]来查询是会报错的。因为pandas会混淆不知道我们究竟是想要查询一列还是一行,所以这个时候只能通过iloc或者是loc进行。

逻辑表达式

和numpy一样,DataFrame也支持传入一个逻辑表达式作为查询条件

比如我们想要查询分数大于200的行,可以直接在方框中写入查询条件df['score'] > 200。

实际上我们知道df['score']可以获得这一列对应的Series,加上了判断之后,得到的结果应该是一个Bool型的Series。所以如果我们直接传入一个bool型的数组也是一样可以完成查询的:

如果表达式有多个也没问题,不过需要使用括号将表达式包起来,并且多个表达式之间用位运算符连接,比如&, |。

总结

今天主要介绍了loc、iloc和逻辑索引在pandas当中的用法,这也是pandas数据查询最常用的方法,也是我们使用过程当中必然会用到的内容。建议大家都能深刻理解,把它记牢。

很多人在学习pandas的前期遇到最多的一个问题就是会把iloc和loc记混淆,搞不清楚哪个是索引查询哪个是行号查询。曾经原本还有一个ix方法,可以兼顾iloc和loc的功能,既可以索引查询也可以行号查询。但是可惜的是,在pandas最新的版本当中这个方法已经被废弃了。我个人也没有什么太好的办法,只能熟能生巧了,多用几次就记住了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第十五章·Linux系统管理-进程管理
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
1.1K0
第十五章·Linux系统管理-进程管理
​Linux CPU 性能优化指南
本文作者:allenxguo,腾讯 QQ 音乐后台开发工程师 本文主要帮助理解 CPU 相关的性能指标,常见的 CPU 性能问题以及解决方案梳理。 系统平均负载 简介 系统平均负载:是处于可运行或不可中断状态的平均进程数。 可运行进程:使用 CPU 或等待使用 CPU 的进程 不可中断状态进程:正在等待某些 IO 访问,一般是和硬件交互,不可被打断(不可被打断的原因是为了保护系统数据一致,防止数据读取错误) 查看系统平均负载 首先top命令查看进程运行状态,如下: PID USER
腾讯技术工程官方号
2020/08/11
8.6K0
Linux高负载排查最佳实践
在Linux系统中,经常会因为负载过高导致各种性能问题。那么如何进行排查,其实是有迹可循,而且模式固定。
十里桃花舞丶
2024/03/15
5210
Linux高负载排查最佳实践
系统的load average
可运行状态进程:可以理解为系统内正在占用CPU或正在等待CPU的进程,也就是处于R状态的进程
程哲
2021/12/10
5850
从平均负载开始,这进程是 CPU Bound 还是 IO Bound 的?
在排查性能问题的时候,我们经常会使用 top 或者 uptime 两个 Linux 命令,top 命令和 uptime 命令都会给出最近机器 1 min,5 min,15 min 的平均负载情况,一般平均负载值(Average Load)接近甚至超出 CPU cores (现在一般指 processors 的个数, 现在 CPU 的一个 core 一般有两个 processor, 可以处理两个进程) 时,系统会有性能瓶颈.
Cloud-Cloudys
2023/10/21
2940
从平均负载开始,这进程是 CPU Bound 还是 IO Bound 的?
Linux性能优化
性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快,无法支撑更多的请求。 性能分析实际上就是找出应用或系统的瓶颈,设法去避免或缓解它们。
mikelLam
2022/10/31
2.8K0
Linux性能优化
一秒内诊断 Linux 服务器的性能
60,000 毫秒内对 Linux 的性能诊断 当你为了解决一个性能问题登录到一台 Linux 服务器:在第一分钟你应该检查些什么? 在 Netflix,我们有一个巨大的 EC2 Linux 云,以及大量的性能分析工具来监控和诊断其性能。其中包括用于云监控的 Atlas,以及用于按需实例分析的 Vector。虽然这些工具可以帮助我们解决大多数问题,但我们有时仍需要登录到一个服务器实例,并运行一些标准 Linux 性能工具。 在这篇文章中,Netflix Performance Engineering 团
小小科
2018/05/04
1.5K0
一秒内诊断 Linux 服务器的性能
从入门到转型之Linux性能优化实践学习指南
本系列是从入门到转型之Linux性能优化实践学习指南,是博主学习Linux性能优化之路的精华版本,我将分享大量性能优化的思路和方法,并进行相应工具使用介绍和总结。
全栈工程师修炼指南
2022/09/29
6070
从入门到转型之Linux性能优化实践学习指南
LINUX下查看CPU使用率的命令
今天就来好好学习下Linux下如何查看CUP的使用率: 监控CPU的性能一般包括以下3点:运行队列、CPU使用率和上下文切换。 对于每一个CPU来说运行队列最好不要超过3,例如,如果是双核CPU就不要超过6。如果队列长期保持在3以上,说明任何一个进程运行时都不能马上得到cpu的响应,这时可能需要考虑升级cpu。另外满负荷运行cpu的使用率最好是user空间保持在65%~70%,system空间保持在30%,空闲保持在0%~5% 。
软测小生
2019/07/05
50.2K0
LINUX下查看CPU使用率的命令
如何理解系统平均负载值(一)
每当我们发现系统变慢时,通常做的第一件事,就是执行top或者uptime命令,来了解系统的负载情况。比如下面这样,我在命令行里输入了uptime命令,系统也随即给出了结果。
全栈程序员站长
2022/09/06
8890
五分钟带你掌握Linux系统查看CPU使用率、内存使用率、磁盘使用率
%us:表示用户空间程序的cpu使用率(没有通过nice调度) %sy:表示系统空间的cpu使用率,主要是内核程序。 %ni:表示用户空间且通过nice调度过的程序的cpu使用率。 %id:空闲cpu %wa:cpu运行时在等待io的时间 %hi:cpu处理硬中断的数量 %si:cpu处理软中断的数量 %st:被虚拟机偷走的cpu 注:99.0 id,表示空闲CPU,即CPU未使用率,100%-99.0%=1%,即系统的cpu使用率为1%。
不吃小白菜
2021/03/02
19.5K0
【科研利器】进程管理
中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响设备的请求
自学气象人
2022/11/14
9430
【科研利器】进程管理
关于linux中的CPU上下文切换
目录 1.什么是CPU上下文切换 2.CPU上下文切换的类型 3.如何查看系统中的上下文切换 4.案例 5.总结 ---- 读过倪朋飞的《Linux性能优化实战》经常说的 CPU 上下文切换是什么意思
冬天里的懒猫
2021/08/05
1.2K0
相关推荐
第十五章·Linux系统管理-进程管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验