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 的索引和列名。
  • 在进行索引操作时,确保使用了正确的符号和方法。
  • 对于复杂的索引操作,可以使用小范围的测试数据来验证您的索引逻辑是否正确。
  • 在进行链式索引时,使用括号来确保正确的执行顺序。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亚特全球链锯文化推广大使活动盛大启航

(本台记者报)链锯,这一象征着力量与技艺的工具,自诞生以来便见证了人类工业文明的进步。从最初的简易链锯到如今的多功能锂电链锯,彰显了人类对于技艺与科技的追求,其演变历程不仅映射出人类科技的巨大飞跃…

git的Cherry pick

Cherry pick Git Cherry Pick详解 https://blog.csdn.net/jam_yin/article/details/131594716 目标: 将开发分支A中提交的部分内容合并到B分支(可能是测试分支) 步骤: vscode安装 点击下图标进入graph

只有你相信,客户才会相信

我们外贸人在一起聊天的时候,可能最常说的话就是我们的产品不好做,出单太难了,是不是产品不行啊?但是又不知道什么产品好做,好不容易听到一款产品好做吧?自己又不懂,摸索不出来,因此…

深入分析四层/七层网关

1 简要介绍 随着云计算、大数据和物联网技术的迅猛发展,网络通信的复杂性和需求日益增加。在这种背景下,网关技术作为网络通信中的重要组成部分,扮演着关键的角色。 作为连接不同网络或协议的桥梁,四层网关和七层网关是两种常见且…

Pytorch编写Transformer

本文参考自https://github.com/datawhalechina/learn-nlp-with-transformers/blob/main/docs/ 在学习了图解Transformer以后,需要用Pytorch编写Transformer,下面是写代码的过程中的总结,结构根据图解Transformer进行说明。 import numpy as …

xss.haozi.me靶场通关参考

url&#xff1a;https://xss.haozi.me/ 文章目录 0x000x010x020x030x040x050x060x070x080x090x0A0x0B0x0C00xD00xE00xF0x100x110x12 0x00 先看js代码&#xff0c;第一关给你热热手&#xff0c;没给你加过 payload&#xff1a; <script>alert(1)</script>0x01 这…

Win11 删除文件时提示“找不到该项目,请重试”的解决办法

1、Win R 打开运行窗口&#xff0c;输入 notepad 并回车打开文本文档(记事本)软件&#xff0c;如下图&#xff1a; 2、在文本文档(记事本)软件中复制粘贴以下代码&#xff0c;如下图&#xff1a; del /f /a /q \\?\%1 rd /s /q \\?\%1或DEL /F /A /Q \\?\%1 RD /S /Q \\?…

4个工作学习必备的工具,请不要错过

一键改图 “一键改图”是一款简单易用的在线图片处理工具&#xff0c;提供了多种功能来帮助用户快速处理图片。具体功能包括&#xff1a; 压缩图片质量&#xff1a;可以调整图片的质量&#xff0c;使其更小但不失真。 压缩图片尺寸&#xff1a;可以根据需要调整图片的尺寸。 …

leetcode刷题日志-旋转图像

题目描述 解题思路 也就是一个找规律的题&#xff0c;可以写一个转换前后的坐标对比&#xff0c;很容易能找到规律。[i,j]->[j,length-i-1]上式就是找到的规律。在解题的时候遇到过一个问题&#xff0c;就是如果我单纯的将数组复制给一个中间变量&#xff0c;或者是将数组中…

Vue发送http请求

1.创建项目 创建一个新的 Vue 2 项目非常简单。在终端中&#xff0c;进入您希望创建项目的目录(我的目录是D:\vue)&#xff0c;并运行以下命令&#xff1a; vue create vue_test 2.切换到项目目录&#xff0c;运行项目 运行成功后&#xff0c;你将会看到以下的编译成功的提示…

力扣-两数之和

文章目录 题目题解方法1-暴力方法2-哈希 题目 原题链接&#xff1a;两数之和 题解 方法1-暴力 我最先想到的方法就是暴力&#xff0c;两层for循环&#xff0c;也能通过。&#xff08;拿到算法题在没有思路的时候暴力就是思路&#xff0c;哈哈哈&#xff09; public class T…

无需安装就能一键部署Stable Diffusion 3?

一键部署使用SD3&#xff1f;让你的创作更加便捷&#xff01; 前言 厚德云上架SD3! 距离Stable Diffusion 3的上线已经有一阵时间了。从上线至今SD3也是一直好评不断&#xff0c;各项性能的提升也让它荣获“最强开源新模型”的称号。成为了AI绘画设计师们新的香馍馍。 可对于SD…

调取Windows系统虚拟键盘

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using System.Diagnostics;namespace 调取Windows虚拟键盘 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void richTextBox1_DoubleClick(object sender, EventArgs e){Proces…

Elementor无需第三方插件实现高级下拉菜单/巨型菜单

使用新的嵌套功能创建美观的菜单和大型菜单。巨型菜单是具有复杂导航结构和独特设计的网站的理想选择。 Elementor-设置-特性-Menu启用 之后再去前端编辑器设计即可&#xff0c;就会有一个新的menu菜单模块了。 这个菜单的下拉则是通过Elementor直接来设计&#xff0c;也就以为…

【启明智显产品介绍】Model3工业级HMI芯片详解系列专题(一):芯片性能

Model3工业级跨界MCU是一款国产自主的基于RISC-V架构的高性能芯片&#xff0c;内置平头哥玄铁E907&#xff0c;主频480MHz&#xff0c;片上1MB大容量SRAM以及64Mb PSRAM。 Model3工业级MCU具有丰富的屏接口、高分辨率PWM和多路高精度定时器&#xff0c;可以处理各类实时数据与实…

HTML(11)——CSS三大特性

CSS拥有三大特性&#xff0c;分别是&#xff1a;继承性&#xff0c;层叠性&#xff0c;优先级 继承性 说明&#xff1a;子级标签默认继承父级标签的文字控制属性。 如果子级自己有样式&#xff0c;则父级的属性不生效 例如&#xff1a; <style> body{ font-size:30px;…

常见的创建型设计模式( 一 )

设计模式( 一 ) 常见的创建型设计模式 1.单例模式 : 确保一个类只有一个实例 , 为整个程序提供一个全局的访问接口。getInstance 实现方式 饿汉式&#xff0c;在调用getInstance 创建实例的时候 &#xff0c;实例已经存在了 &#xff0c;不需要我们再次去 new创建。 优点&a…

css布局之flex应用

/*父 100*/.parent-div {/* 这里添加你想要的属性 */display: flex;flex-direction: row; //行justify-content: space-between; //左右对齐align-items: center;flex-wrap: wrap; //换行}/*中 90 10 */.middle-div {/* 这里添加你想要的属性 */display: flex;flex-direction:…

jenkins安装和使用 (二)

参考视频资料 https://www.bilibili.com/video/BV1bS4y1471A?p10&vd_sourcee0dcd147bd5d730317de804d788cd6f9 安装maven插件 新建item 配置构建信息 项目地址替换为自己的实际地址 其余保持先保持默认 先然后在主页就看到了这个项目 查看控制台输出 稍等一…

小林图解系统-二.硬件结构 2.5CPU是如何执行任务的?

CPU如何读取数据的&#xff1f; CPU访问L1 Cache速度比访问内存快100倍&#xff0c;有高速缓存的目的&#xff1a;把Cache作为CPU与内存之间的缓存层&#xff0c;减少对内存的访问频率 所有CPU Cache Line是CPU从内存读取数据到Cache的单位。 64字节 CPU加载数组里面连续的多…