pandas中的loc和iloc

loc和iloc的比较

.loc.iloc 是 pandas 提供的两种不同的索引方法,它们的主要区别在于索引数据的依据:

  1. .loc
    • 基于标签的索引,使用 DataFrame 或 Series 的索引标签(即行名和列名)来获取数据。
    • 可以使用单个标签、标签列表、标签切片、布尔数组或者 callable 函数作为索引器。
    • 如果使用标签索引并且标签不存在,.loc 会抛出一个 KeyError
    • 对于切片,包括两端的标签。
  2. .iloc
    • 基于位置的索引,使用 DataFrame 或 Series 的整数索引位置来获取数据。
    • 可以使用单个整数、整数列表、整数切片、布尔数组或者 callable 函数作为索引器。
    • 如果使用整数索引并且位置超出范围,.iloc 会抛出一个 IndexError,但切片索引器允许超出范围的索引。
    • 对于切片,不包括结束位置的索引,这与 Python 的列表切片行为一致。
      简而言之,.loc 用于根据数据的实际标签(名称)进行索引,而 .iloc 用于根据数据的实际位置(整数索引)进行索引。选择哪一种方法取决于您是否知道数据的标签,或者是否需要按照数据的实际位置进行操作。

示例

下面为 .loc.iloc 提供一个例子,以说明它们在 DataFrame 中的使用。

.loc 示例

假设我们有一个 DataFrame,其中包含了某些水果的库存信息,包括它们的种类和数量。DataFrame 的索引是水果的名称,列是 ‘库存数量’。

import pandas as pd
# 创建一个示例 DataFrame
data = {'库存数量': [10, 20, 30, 40]}
df = pd.DataFrame(data, index=['苹果', '香蕉', '樱桃', '梨'])

现在,如果我们想要选择所有库存数量大于 20 的水果,我们可以使用 .loc 和一个布尔数组:

# 使用布尔索引选择库存数量大于 20 的行
selected_fruits = df.loc[df['库存数量'] > 20]
print(selected_fruits)

输出将是:

     库存数量
樱桃     30
梨       40

.iloc 示例

使用同一个 DataFrame,如果我们想要选择前两个水果的库存数量,我们可以使用 .iloc 和一个整数列表:

# 使用整数索引选择前两个行的数据
first_two_fruits = df.iloc[[0, 1]]
print(first_two_fruits)

输出将是:

     库存数量
苹果     10
香蕉     20

或者,如果我们想要选择前两个水果的库存数量,也可以使用切片:

# 使用切片选择前两个行的数据
first_two_fruits = df.iloc[0:2]
print(first_two_fruits)

输出将是:

     库存数量
苹果     10
香蕉     20

请注意,在 .iloc 中使用切片时,结束索引是不包含的,这与 Python 的列表切片和 .loc 的行为不同。


两个结合起来使用:
在这里插入图片描述

需要注意的一些问题

在使用 .loc.iloc 进行数据索引时,有些常见的错误需要避免,以确保正确地获取数据。以下是一些需要注意的问题:

  1. 使用错误的索引方法
    • 使用 .loc 时使用整数索引,而不是标签索引。
    • 使用 .iloc 时使用标签,而不是整数位置索引。
  2. 索引超出范围
    • 使用 .iloc 时,提供的整数索引超出 DataFrame 或 Series 的范围。
    • 使用 .loc 时,提供的标签不存在于 DataFrame 或 Series 的索引中。
  3. 切片包含性误解
    • 对于 .loc,切片包括两端的标签,而对于 .iloc,切片不包括结束位置的索引。混淆这一点可能导致意外的结果。
  4. 布尔索引的错误使用
    • .loc.iloc 中使用布尔索引时,错误地将条件表达式写错,导致选择错误的数据行。
  5. 对多级索引(MultiIndex)的不正确处理
    • 当 DataFrame 有多级索引时,没有正确地使用元组来指定各级索引,导致选择错误的数据。
  6. 使用 = 赋值而不是 == 进行比较
    • 在布尔索引时,错误地使用 = 进行赋值操作,而不是 == 进行比较。
  7. callable 索引器的错误使用
    • 使用 callable 作为索引器时,返回的索引不正确或者与 DataFrame 的形状不匹配。
  8. 在链式索引中不使用括号
    • 当进行链式索引操作时(即连续使用 .loc.iloc),没有使用括号将索引操作括起来,可能会导致解析错误。
  9. NoneNaN 的混淆
    • 在布尔索引中,错误地将 NoneNaN 混淆,这可能会导致意外的过滤结果。

为了避免这些错误,需要注意的东西:

  • 清楚 DataFrame 或 Series 的索引类型(整数索引或标签索引)。
  • 在使用索引之前,先检查 DataFrame 或 Series 的索引和列名。
  • 在进行索引操作时,确保使用了正确的符号和方法。
  • 对于复杂的索引操作,可以使用小范围的测试数据来验证您的索引逻辑是否正确。
  • 在进行链式索引时,使用括号来确保正确的执行顺序。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025计算机毕业设计选题题目推荐-毕设题目汇总大全

选题在于精,以下是推荐的容易答辩的选题: SpringBoot Vue选题: 基于SpringBoot Vue家政服务系统 基于SpringBoot Vue非物质文化遗产数字化传承 基于SpringBoot Vue兽医站管理系统 基于SpringBoot Vue毕业设计选题管理系统 基于SpringBoot Vue灾害应急救援…

算法金 | 再见!!!梯度下降(多图)

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 接前天 李沐:用随机梯度下降来优化人生! 今天把达叔 6 脉神剑给佩奇了,上 吴恩达:机器…

异构集成封装类型2D、2.1D、2.3D、2.5D和3D封装技术

异构集成封装类型:2D、2.1D、2.3D、2.5D和3D封装详解 简介随着摩尔定律的放缓,半导体行业越来越多地采用芯片设计和异构集成封装来继续推动性能的提高。这种方法是将大型硅芯片分割成多个较小的芯片,分别进行设计、制造和优化,然后…

Java 17的新特性

Java 17引入了多项新特性,以下是一些重要的更新: 增强的伪随机数生成器(JEP 356) Java 17为伪随机数生成器(PRNG)提供了新的接口类型和实现,包括可跳转的PRNG和另一类可拆分的PRNG算法&#xf…

【机器学习】 第1章 概述

一、概念 1.机器学习是一种通过先验信息来提升模型能力的方式。 即从数据中产生“模型”( model )的算法,然后对新的数据集进行预测。 2.数据集(Dataset):所有数据的集合称为数据集。 训练集:用来训练出一个适合模…

基于GIS、RS、VORS模型、CCDM模型、geodetecto、GWR模型集成的生态系统健康的耦合协调分析

如何集成多源数据,依托ArcGIS Pro和R语言环境,采用“活力-组织力-恢复力-贡献力”(VORS)模型定量测算生态系统健康指数(EHI);如何从经济城镇化(GDPD)、人口城镇化&#x…

Antd - 上传图片 裁剪图片

目录 本地上传方法【input type"file"】:upload组件【antd】默认接口上传:自定义接口上传:【取消默认上传接口】antd的upload组件beforeUpload还有个比较坑的地方 upload结合裁剪1、antd官方裁剪组件:![在这里插入图片描…

如何通过自己编写Jmeter函数

在Jmeter的函数助手里,有很多内置的函数,比如Random、UUID、time等等。使用这些函数可以快速帮我们生成某些数据,进行一些逻辑处理。用起来非常的方便。 但是在实际接口测试过程中,有很多的需求,Jmeter内置的函数可能…

easyexcel和poi版本冲突报错深入解析v2

easyexcel报错解决 问题 项目由poi改用easyexcel,报错如下: java.lang.NoSuchMethodError: ‘org.apache.poi.ss.usermodel.CellType org.apache.poi.ss.usermodel.Cell.getCellType()’ 原因 easyexcel中的poi和项目原本的poi版本冲突问题。 由于之前做…

移植案例与原理 - HDF驱动框架-驱动配置(2)

1.2.7 节点复制 节点复制可以实现在节点定义时从另一个节点先复制内容,用于定义内容相似的节点。语法如下,表示在定义"node"节点时将另一个节点"source_node"的属性复制过来。 node : source_node示例如下,编译后bar节点…

一文详解扩散模型

文章目录 1、常见的生成模型2、变分推断简介3、文生图的评价指标4、Diffusion Models5、其他技术交流群精选 节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地…

网络校时服务器:铁路对时有妙招

在信息高速发展的今天,铁路作为国家的经济大动脉,与广大市民生活息息相关,担负着运送大流量乘客、保证交通畅通的重任,为了保证列车的正点运行和乘客的行程,对时间精准度的要求是非常严格的。随着我国铁路的发展速度和…

[AIGC] python遍历以及字符串的切片

以下是一篇关于Python遍历方法和字符串切片的文章,以及一个在LeetCode中的问题进行解释。文章最后会给出解题思路和代码实现。 Python遍历方法与字符串切片入门教程 在Python语言中,我们包含了许多内置的函数和方法令其适合于各种数据处理任务。在这个…

初始化三板斧 - centos7

1、关闭防火墙、关闭SELinux ① 立即关闭防火墙 systemctl stop firewalld ② 设置开机关闭防火墙 systemctl disable firewalld ③ 立即关闭SELinxu setenforce 0 ④ 设置开机关闭SELinux 将SELINUXenforcing 修改替换为 SELINUXdisabled vim /etc/selinux/config se…

java程序监控linux服务器硬件,cpu、mem、disk等

实现 使用Oshi和Hutool工具包1、pom依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.oshi</groupId>&l…

【Oracle篇】rman时间点异机恢复:从RAC环境到单机测试环境的转移(第六篇,总共八篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

龙芯LS2K0300久久派上手体验

介绍 芯片 龙芯2K0300芯片是一款基于LA264处理器核的多功能SoC芯片&#xff0c;可广泛适用于工业控制、通信设备、信息家电和物联网等领域&#xff1b;该芯片采用高集成度设计&#xff0c;可提供丰富的功能接口&#xff0c;满足多场景应用需求&#xff0c;同时支持低功耗技术…

AMBA-CHI协议详解(四)

《AMBA 5 CHI Architecture Specification》 AMBA-CHI协议详解&#xff08;一&#xff09; AMBA-CHI协议详解&#xff08;二&#xff09; AMBA-CHI协议详解&#xff08;三&#xff09; AMBA-CHI协议详解&#xff08;四&#xff09; 文章目录 2.3.3 Atomic transactions2.3.4 S…

【IPython的使用技巧】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Java 读取Excel导入数据库,形成树状结构

最近开发过程中遇到一个Excel的导入的功能&#xff0c;因为导入的数据结构具有层次结构&#xff0c;经过一番研究&#xff0c;最终得以实现&#xff0c;所有写下该文章&#xff0c;记录过程&#xff0c;供以后参考。 下图是导入Excel的数据结构&#xff1a; 使用POI解析Excel&…