dataframe iloc_pandas

2023-10-27

点击上方蓝字,关注并星标,和我一起学技术。

fd023b43d8e354562d40b662a768efc5.png

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

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

数据准备

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

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

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

data = {'name': ['Bob', 'Alice', 'Cindy', 'Justin', 'Jack'], 'score': [199, 299, 322, 212, 311], 'gender': ['M', 'F', 'F', 'M', 'M']}

df = pd.DataFrame(data)
7337725f8cd50e0c0242687556d75984.png

loc

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

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

a196373ab49a19b856576d81d3896e0f.png

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

e03c7c603e97724604f7e48d894dd7fe.png

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

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

7ed23b78adcda1e276f27a4c3f8ed8b3.png

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

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

6f62c6534e32f74fe5553ecff545a73b.png

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

8bc7e18d616c3c4028a21ca80e2f664f.png

iloc

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

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

132adbb621286b589bc3ca752f1343dd.png

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

900ea7faac2427a1e1c46eb8248ccf6b.png

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

053f2918474af04ab8f58aab43d132c0.png

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

5ebc42ca1208046d1a5502fc3ab3a3fb.png

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

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

b5b666d90eb6d174c485b5dc78c97646.png

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

逻辑表达式

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

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

4a9b5138024048db064b0547c3eb74b4.png

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

3dfad1242ff992c793feeebdf77a0443.png

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

e5e1fea2dc9beb4408d0d02fa7941ac8.png

总结

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

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

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、在看、点赞)。

caac9b3e0a17e1129ef367d4f0f45f32.png

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

dataframe iloc_pandas 的相关文章

随机推荐

  • Python 第一章 基础知识(3) 数字和表达式 加减乘除

    第一章 基础知识 3 数字和表达式 运行IDLE 在提示符前输入 加法 gt gt gt 2 2 4 lt 解释器会得出2 2的答案4 除法 gt gt gt 1 2 0 lt 解释器会给出截除掉小数部分的1除以2的商 gt gt gt 1
  • Mybatis-plus:条件查询的方法

    方法1 QueryWrapper
  • windows系统80端口号被System占用

    废话不多说 直入主题 windows系统80端口号被System占用 查找追踪看到是 PID 4 的一个System进程在占用 网上所说的解决方法 方法一 1 Win R 组合快捷键 快速打开运行命令框 在打开后面键入命令 Regedit
  • 码农得用专用的Code字体,推荐几款专业级别的程序员专用字体

    别怀疑 下面的这些字体是程序员专用的编码字体 尤其是带 Code 名字的字体 从名字上看就知道 专门用来Code用的 1 Source Code Pro PS那个公司知道吧 就是这个公司专门为程序员设计的等宽字体 要知道 写代码 一般的字体
  • 光束法空三的计算问题,误差方程的多余观测数,未知数个数、多余观测值的计算

    1 未知数个数 必要观测值个数 未知数个数 t u 3 未知点数目 6 相片数目 3 代表一个未知点的 x y z 6代表一张像片的6个外方位元素 都是待定值 都是未知数 2 观测值个数 1 未知数个数求法 1 观测值个数 n 2 m 的含
  • sparksql压缩小文件

    SET spark sql shuffle partitions 2 SET spark sql adaptive enabled true SET spark sql adaptive shuffle targetPostShuffleI
  • Kotlin 常见符号大全

    gt 下划线 as 1 修饰在成员变量的类型后面 表示这个变量可以为null 系统在任何情况下不会报它的空指针异常 修改在对象后面代表该对象如果为null则不处理后面逻辑 如果我们定义的变量是一个可以为空的类型 则要用 String 在变量
  • Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程

    Qt MinGW CMake编译OpenCV 4 5 4 包含opencv contrib 详细过程 目录 Qt MinGW CMake编译OpenCV 4 5 4 包含opencv contrib 详细过程 1 工具下载准备 2 CMak
  • Linux·异步IO编程框架

    hi 大家好 今天分享一篇Linux异步IO编程框架文章 对比IO复用的epoll框架 到底性能提高多少 让我们看一看 译者序 本文组合翻译了以下两篇文章的干货部分 作为 io uring 相关的入门参考 How io uring and
  • ZGC的运行过程以及读屏障

    ZGC运作过程 ZGC的运作过程大致可划分为以下四个大的阶段 并发标记 Concurrent Mark 与G1一样 并发标记是遍历对象图做可达性分析的阶段 它的初始标记 Mark Start 和最终标记 Mark End 也会出现短暂的停顿
  • 了解前端监控和埋点(持续更新中,,,)

    基本概念 前端埋点主要是为了运营以及开发人员采集用户行为数据 以及页面性能等数进行后续的数据分析 一般目的 1 性能监控 2 数据监控 3 异常监控 埋点方案 5 代码埋点 6 无埋点 7 可视化埋点 埋点的目的 在现今用户就是上帝的年代
  • 会话保持和非会话保持

    会话保持 方式 1 session机制保持会话 缺点 1 1当前服务器处于高并发的时候 对于服务器是一个压力 占用大量的服务器资源 1 2如果一个业务系统是分布式部署在多个服务器的情况下 session不能相互间共享 解决方式 1 3高并发
  • 十个常见异常实例

    第一个 try float j 1 0 catch Exception e exceptions add e 第二个 try String s null String m s toLowerCase catch Exception e ex
  • 常见软件开发模式

    一 瀑布模型 瀑布模型的特点 1 阶段间具有顺序性和依赖性 2推迟实现 3质量保证的观点 总结 瀑布模型是文档驱动的模型 遵守这个约束可使软件维护变得比较容易一些 从而显著降低软件预算 二 快速原型 快速分析 gt 构造 gt 运行 gt
  • NOIP 1998 普及组 2的幂次方 解题报告

    虽说是普及组 还是不好处理啊 想了好久 最后决定使用一个栈来维护所有的枚举 总的来说我这里算是用了两个栈 因为BFS本身就能算一个栈 这个题目真的有挑战性啊 算法没什么 但是规律方面的东西好重要饿 不说了 代码 include
  • 逻辑运算符详细讲解(基础版)

    本文将详细讲解6个逻辑运算符的应用 总结放在最后了哦 1 与 gt 见false则为false 这里用两个关系表达式进行比较 只要其中一个运算结果为false则最后结果也为false 2 或 gt 见true则为true 这里用两个关系表达
  • openGauss学习笔记-66 openGauss 数据库管理-创建和管理schema

    文章目录 openGauss学习笔记 66 openGauss 数据库管理 创建和管理schema 66 1 背景信息 66 2 注意事项 66 3 操作步骤 66 3 1 创建管理用户及权限schema 66 3 2 使用schema 6
  • python-图形用户界面

    图形用户界面 1 python中图形界面库 界面开发 Tkinter 是 Python 官方提供的图形用户界面开发库 用于封装 TGUI 工具包 跨平台 PyQt 是非 Python 官方提供的图用户界面开发库 用于封装 Qt 工具包 跨平
  • 解决Xilinx Vitis 2020.1版本启动之后进入主页面无响应的结果

    一 问题描述 在启动 Xilinx Vitis 2021 1 时 无论是从 Xilinx Vivado 界面的 Launch Vitis 启动还是直接启动都会在启动后显示出主界面后未响应 其原因是 Windows 系统的 PATH 环境变量
  • dataframe iloc_pandas

    点击上方蓝字 关注并星标 和我一起学技术 今天是pandas数据处理专题第三篇文章 我们来聊聊DataFrame中的索引 上篇文章当中我们简单介绍了一下DataFrame这个数据结构的一些常见的用法 从整体上大概了解了一下这个数据结构 今天