Pandas loc 与 iloc:何时使用它们进行数据选择

2023-10-16

The loc and iloc属性是 Pandas 库的一部分,允许根据某些标准从 DataFrame 中选择数据。
本教程将讨论这两种属性之间的主要区别,以及如何确保您使用适合您特定需求的属性。
下表总结了这两个属性之间的差异:

Property loc iloc
Indexing type Label-based Integer-based
Data selected By the value of the index By the position in the DataFrame
Format of arguments Single label, list of labels, slice object with labels, boolean array Single integer, list of integers, slice objects, boolean array
Includes final value in range Yes No
Handles boolean indexing Directly Indirectly, using a boolean array
Can result in confusion with integer index Yes, if index also contains integers No
Performance Slightly faster

现在,让我们深入了解细节。首先,让我们创建一个数据框作为样本:


import pandas as pd
data = pd.DataFrame({
  'Age': [26, 27, 28, 29, 30],
  'Height': [165, 168, 170, 173, 175],
  'Weight': [55, 58, 60, 63, 65]}, 
  index=['Emily', 'Ava', 'Charlotte', 'Sophia', 'Olivia']
)
print(data)  

Output


           Age  Height  Weight
Emily       26     165      55
Ava         27     168      58
Charlotte   28     170      60
Sophia      29     173      63
Olivia      30     175      65  

这是我们将要处理的 DataFrame。正如您所看到的,它保存了五个人的数据,并包含他们的年龄、身高和体重。

 

 

使用 loc 和 iloc 选择行

loc 和 iloc 都可用于行选择,但它们的操作方式略有不同。


# Selecting a range of rows with loc
print(data.loc['Emily':'Charlotte'])  

Output:


           Age  Height  Weight
Emily       26     165      55
Ava         27     168      58
Charlotte   28     170      60  

使用 loc,我们可以选择一系列行,重要的是,该范围包括开始索引和停止索引。上面的代码选择从“Emily”到“Charlotte”(含)的三行。


# Selecting a range of rows with iloc
print(data.iloc[0:2])  

Output:


      Age  Height  Weight
Emily   26     165      55
Ava     27     168      58  

当我们使用 iloc 选择行时,我们需要记住,与 loc 不同,范围包含起始索引,不包含终止索引。本质上,它与典型的 Python 索引是一致的。

 

使用 loc 和 iloc 进行切片

让我们探讨一下 loc 和 iloc 在数据帧切片方面有何不同


# Slicing with loc
print(data.loc['Emily':'Sophia', 'Age':'Height'])  

Output:


           Age  Height
Emily       26     165
Ava         27     168
Charlotte   28     170
Sophia      29     173  

使用 loc,我们可以通过指定范围来对行和列进行切片。

请注意,此处的范围包括停止索引。


# Slicing with iloc
print(data.iloc[0:4, 0:2])  

Output:


           Age  Height
Emily       26     165
Ava         27     168
Charlotte   28     170
Sophia      29     173  

与 loc 不同,这里的停止索引是独占的。

 

布尔索引

Pandas 中的布尔索引通过选择 DataFrame 中条件为 true 的行来工作。


# Boolean indexing with loc
print(data.loc[data['Age'] > 27])  

Output:


           Age  Height  Weight
Charlotte   28     170      60
Sophia      29     173      63
Olivia      30     175      65  

在此示例中,我们使用 loc 来选择“Age”大于 27 的所有行。

大括号内的条件是布尔条件,用于检查“Age”是否大于 27。

然后 loc 属性仅返回此条件为 True 的行。

然而,对于国际劳工组织,情况有所不同。


# Attempting boolean indexing with iloc
# Uncomment the below lines to run the code
#print(data.iloc[data['Age'] > 27])  

如果您尝试使用 iloc 进行布尔索引,如上面注释的代码所示,您将遇到错误。

这凸显了 loc 和 iloc 之间的一个重要区别 - iloc 不直接支持布尔索引。

相反,您需要获取布尔索引,然后使用它进行数据选择。


# Boolean indexing workaround with iloc
boolean_index = data['Age'] > 27
print(data.iloc[boolean_index.values])  

Output:


           Age  Height  Weight
Charlotte   28     170      60
Sophia      29     173      63
Olivia      30     175      65  

在上面的代码中,我们首先获得一个布尔索引,其中“Age”大于27。

然后将该索引传递给 iloc 方法以获取所需的行。

 

性能比较

让我们通过一个简单的基准测试来看看 loc 和 iloc 的性能。


import timeit
import pandas as pd
import numpy as np

# Create a large DataFrame
large_data = pd.DataFrame(np.random.rand(10000, 10000))

# Time loc
loc_start_time = timeit.default_timer()
large_data.loc[0, 0]
loc_end_time = timeit.default_timer()
loc_time = loc_end_time - loc_start_time

# Time iloc
iloc_start_time = timeit.default_timer()
large_data.iloc[0, 0]
iloc_end_time = timeit.default_timer()
iloc_time = iloc_end_time - iloc_start_time

print("Time taken for loc: {:.6f} seconds".format(loc_time))
print("Time taken for iloc: {:.6f} seconds".format(iloc_time))
  

Output:


Time taken for loc: 0.005681 seconds
Time taken for iloc: 0.000095 seconds  

请注意,实际处理时间将根据环境、DataFrame 的大小以及正在执行的任务而有所不同。

从上面的例子中,我们可以得出结论,iloc 的执行速度比 loc 稍快。

结论是,如果您知道您将根据整数索引引用行/列,并且速度是优先考虑的,那么 iloc 可能是您的选择。

但是,一般建议是更多地根据您的索引需求是基于标签 (loc) 还是基于整数 (iloc) 进行选择,而不是基于哪个更快。

 

何时使用 loc 与 iloc

虽然它们提供非常相似的功能,但存在根本差异,使它们适合不同的任务。

在以下情况下使用 loc:

  • 您想要基于标签的索引。 loc 旨在处理这种情况。
  • 数据集有一个字符串索引。
  • 您正在使用布尔索引。 loc 可以接受布尔数组来直接索引。

在以下情况下使用 iloc:

  • 您的 DataFrame 有一个数字索引。虽然 loc 可以使用数字标签,但如果标签也是整数,有时会导致混乱。
  • 您依赖于数据帧中项目的位置。
  • 您需要稍微提高速度。在计算测试中,iloc 的性能略优于 loc。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas loc 与 iloc:何时使用它们进行数据选择 的相关文章

随机推荐

  • 如何在 MacOS 上安装 VirtualBox

    如何在 macOS 上安装 VirtualBox 在 macOS 系统上安装 VirtualBox 以及扩展包的分步教程 VirtualBox 是一款流行的跨平台虚拟机管理器 可让您在 Mac 上创建虚拟机 VM VM可用于同时运行不同的操
  • 如何在 Ubuntu 18.04 上安装 Anaconda

    Anaconda 是最流行的 Python 数据科学和机器学习平台 用于大规模数据处理 预测分析和科学计算 Anaconda 发行版附带了 1 000 多个数据包 conda命令行工具和名为 Anaconda Navigator 的桌面图形
  • 如何检查Python版本

    Python 是世界上最流行的编程语言之一 它用于开发网站 编写脚本 机器学习 分析数据等 本文介绍如何使用命令行检查操作系统上安装的 Python 版本 这在安装需要特定版本 Python 的应用程序时非常有用 我们还将向您展示如何以编程
  • 如何在 Ubuntu 18.04 上添加交换空间

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 通常 在虚拟机上运行 Ubuntu 时 不存在交换分区 唯一的
  • Linux 中的终止命令

    Linux是一个伟大而先进的操作系统 但它并不完美 有时 某些应用程序可能会开始表现不稳定并变得无响应或开始消耗大量系统资源 无响应的应用程序无法重新启动 因为原始应用程序进程永远不会完全关闭 唯一的解决方案是重新启动系统或终止应用程序进程
  • 如何更改 Linux 中的 Swappiness 值

    交换空间是 RAM 内存已满时使用的硬盘的一部分 交换空间可以是专用交换分区或交换文件 当 Linux 系统耗尽物理内存时 非活动页面将从 RAM 移至交换空间 Swappiness 是一个 Linux 内核属性 它设置将页面从物理内存换出
  • 如何在 Python 中查找列表的长度

    列表是Python中最常用的数据类型之一 用于存储相同类型的项目的集合 本文介绍如何查找列表的长度 len 功能 Python有一个内置函数len 返回给定对象的长度 该对象可以是一个list 元组 字符串 字典等 的语法len 函数如下
  • Tmux 入门

    本指南将介绍 Tmux 的安装和基本用法 以帮助您入门和运行 什么是 tmux Tmux 是终端多路复用器的替代品GNU 屏幕 换句话说 这意味着您可以启动 Tmux 会话 然后在该会话中打开多个窗口 每个窗口占据整个屏幕 并且可以分割成矩
  • 如何在 Python 中向列表添加元素(追加、扩展和插入)

    在 Python 中使用列表时 您经常需要向列表中添加新元素 Python 列表数据类型具有三种添加元素的方法 append 将单个元素追加到列表中 extend 将可迭代的元素追加到列表中 insert 在列表的给定位置插入单个项目 所有
  • 如何添加 Git 远程

    通常 在使用 Git 时 您将仅使用一个名为 origin 的远程服务器 并针对不同的功能和环境使用不同的分支 Origin 是克隆存储库时自动创建的远程名称 并指向克隆的存储库 然而 当与一群人协作处理一个项目时 您可能会发现使用多个 G
  • Linux 中的 Dig 命令(DNS 查找)

    Dig Domain Information Groper 是一个强大的命令行工具 用于查询 DNS 名称服务器 The dig命令 允许您查询有关各种 DNS 记录的信息 包括主机地址 邮件交换和名称服务器 由于其灵活性和易用性 它是系统
  • 如何在 Ubuntu 20.04 上安装 Zoom

    Zoom是一个易于使用的通信平台 集云视频会议 实时消息传递和内容共享于一体 使用 Zoom 您可以举办网络研讨会 组织在线会议以及创建会议室 本指南介绍如何在 Ubuntu 20 04 上安装 Zoom 相同的说明适用于所有基于 Debi
  • 如何在 Ubuntu 20.04 上安装 Memcached

    Memcached 是一个免费开源的高性能内存键值数据存储 它通常用于通过缓存 API 和数据库调用结果中的各种对象来加速应用程序 本文介绍如何在 Ubuntu 20 04 上安装和配置 Memcached 安装 Memcached mem
  • PyQt5绘图教程(绘画API)

    在本教程中 我们将学习如何绘制矢量图形PyQt5 正如您将看到的 在 Python 中 PyQt5 模块是可用于绘图目的的最简单的模块 在开始之前 让我们使用 PyQt5 创建一个窗口 在其中绘制图形 目录 hide 1 创建一个 PyQt
  • NumPy where 教程(带示例)

    The numpy where函数用于检索 ndarray 中给定条件为 true 的元素的索引 学完本教程后 您将充分了解如何使用numpy where查询NumPy 数组 目录 hide 1 语法和参数 2 使用 x 和 y 参数替换值
  • 使用 sed 命令掌握 Linux 文件中的文本插入

    The ised 中的命令用于在行前插入文本 的一般语法为i命令是 sed pattern i text to be inserted filename 在本教程中 我们将重点介绍如何使用sed命令 目录 hide 1 Sed Insert
  • Sed 命令指南:Linux 中的文本编辑

    sed代表流编辑器 该命令允许您解析和转换文本数据 如果输入源自文件 管道或标准输入 sed逐行处理它 With sed 您可以执行各种文本操作 如插入 删除 搜索和替换 目录 hide 1 Basic Syntax and Operati
  • Pandas查询方法:高效过滤DataFrame

    Pandas提供query 允许用户使用字符串表达式查询 DataFrame 的方法 在本教程中 您将了解query方法以及如何在实际应用中使用它 目录 hide 1 Pandas 查询语法和参数 2 使用查询方法过滤数据帧 3 Using
  • 用于网络故障排除的 Linux 网络命令

    在上一篇文章中 我们谈到了Linux进程管理t 在这篇文章中 我们将讨论 Linux 网络命令以及如何排除网络故障 如果确保物理网络正常工作 下一步就是对网络进行故障排除 这里我们进入我们的主题 即 Linux 网络命令以及如何使用它们对网
  • Pandas loc 与 iloc:何时使用它们进行数据选择

    The loc and iloc属性是 Pandas 库的一部分 允许根据某些标准从 DataFrame 中选择数据 本教程将讨论这两种属性之间的主要区别 以及如何确保您使用适合您特定需求的属性 下表总结了这两个属性之间的差异 Proper