Pandas中iloc[]和loc[]的实现示例

 更新时间:2026年04月28日 09:56:40   作者:人工干智能  
Pandas中的iloc[]和loc[]是数据索引的核心方法,主要区别在于索引依据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

iloc[]和loc[]是Pandas中用于数据索引/切片的核心方法,核心区别在于索引依据不同:iloc基于“整数位置”,loc基于“标签(行索引名/列名)”。以下分点对比并结合实例说明:

一、区别对比

维度iloc[](integer location)loc[](label location)
索引依据行/列的整数位置(从0开始计数)行的索引名、列的列名(标签)
切片规则左闭右开(如0:2仅包含位置0、1)包含终点(如'a':'c'包含标签a、b、c)
支持的索引类型整数、整数列表、整数切片、布尔数组标签、标签列表、标签切片、布尔数组
适用场景按数据的“物理顺序”取数(不管行/列标签)按数据的“逻辑标签”取数(依赖行/列的命名)

注:Pandas 的 “列标签” 和 “行标签” 分别对应 DataFrame.columns 和 DataFrame.index。而机器学习中的 “样本标签”是指样本的目标值(label / 目标变量),二者不同。
注:iloc和loc都支持可调用对象(callable)(比如df.loc[lambda df: df[‘列名’]>0])

二、实例演示(构造带自定义标签的DataFrame)

先创建一个行索引为自定义标签的DataFrame(避免默认整数索引,更易体现区别):

import pandas as pd

data = pd.DataFrame(
    data={'数学': [90, 85, 78], '英语': [88, 92, 75]},
    index=['张三', '李四', '王五']  # 行标签(非默认整数)
)
print("原始DataFrame:")
print(data)

输出:

    数学  英语
张三  90  88
李四  85  92
王五  78  75

1. iloc取单行/loc取单列

  • iloc(按整数位置):行位置0对应“张三”,列位置0对应“数学”
    data.iloc[0]  # 取第1行(位置0)
    # 输出:
    # 数学    90
    # 英语    88
    # Name: 张三, dtype: int64
    
  • loc(按标签):直接用行标签“张三”、列名“数学”
    data.loc['张三']  # 取标签为“张三”的行
    # 输出同iloc[0]
    

2. iloc取多行/loc取多列(切片)

  • iloc(左闭右开)0:2仅包含位置0、1(对应“张三”“李四”)
    data.iloc[0:2]  # 取位置0到2(不含2)的行
    # 输出:
    #    数学  英语
    # 张三  90  88
    # 李四  85  92
  • loc(包含终点)'张三':'王五'包含所有标签在“张三”到“王五”之间的行
    data.loc['张三':'王五']  # 取标签从“张三”到“王五”的行(含王五)
    # 输出:
    #    数学  英语
    # 张三  90  88
    # 李四  85  92
    # 王五  78  75
    

3. 取特定行+列(二维索引)

  • iloc(行位置+列位置):行位置1(李四)、列位置1(英语)
    data.iloc[1, 1]  # 取第2行(位置1)、第2列(位置1)的值
    # 输出:92
    
  • loc(行标签+列名):行标签“李四”、列名“英语”
    data.loc['李四', '英语']  # 取“李四”行、“英语”列的值
    # 输出:92
    

4. 布尔索引(按条件取数)

两者都支持布尔数组,但loc更常用(直接关联标签):

# 条件:数学分数>80
mask = data['数学'] > 80

# iloc:先获取满足条件的行位置,再取数
data.iloc[mask.values]  # mask.values是布尔数组,对应行位置
# 输出:
#    数学  英语
# 张三  90  88
# 李四  85  92

# loc:直接用布尔数组取数(更直观)
data.loc[mask]
# 输出同iloc

三、注意点

  1. 若DataFrame用默认整数行索引(如0、1、2),iloc[0]loc[0]结果可能相同,但逻辑本质不同:iloc[0]是“取位置0”,loc[0]是“取标签为0的行”;
  2. iloc的切片不包含终点(如0:3取0、1、2),loc的切片包含终点(如0:3取标签0、1、2、3),这是最易踩坑的差异;
  3. 实际场景中:
    • 若需要按“数据的物理顺序”取数(如“前5行”),用iloc
    • 若需要按“行/列的命名”取数(如“取‘张三’的成绩”),用loc

测试:看你是否能读懂这句程序:

numerical_df.loc[numerical_df['A'] < numerical_df['B'], 'A'] = 100

到此这篇关于Pandas中iloc[]和loc[]的实现示例的文章就介绍到这了,更多相关Pandas iloc[]和loc[]内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python史上最全种类数据库操作方法分享

    Python史上最全种类数据库操作方法分享

    本文将详细探讨如何在Python中连接全种类数据库以及实现相应的CRUD(创建,读取,更新,删除)操作,文中的示例代码讲解详细,需要的可以参考一下
    2023-07-07
  • Python+selenium实现自动循环扔QQ邮箱漂流瓶

    Python+selenium实现自动循环扔QQ邮箱漂流瓶

    这篇文章主要为大家详细介绍了Python+selenium实现自动循环扔QQ邮箱漂流瓶,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Python使用Beautiful Soup(BS4)库解析HTML和XML

    Python使用Beautiful Soup(BS4)库解析HTML和XML

    这篇文章介绍了Python使用Beautiful Soup(BS4)库解析HTML和XML的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Python Fire实现自动生成命令行接口

    Python Fire实现自动生成命令行接口

    命令行程序是平时写一些小工具时最常用的方式,随着命令行程序功能的丰富,也就是参数多了以后,解析和管理参数之间的关系会变得越来越繁重,而本次介绍的 Fire 库正好可以解决这个问题,下面我们就来看看具体实现方法吧
    2023-09-09
  • python中线程和进程有何区别

    python中线程和进程有何区别

    在本篇文章里小编给大家整理的是一篇关于python中线程和进程的区别相关知识点,有需要的朋友们可以参考下。
    2020-06-06
  • Python查找最长不包含重复字符的子字符串算法示例

    Python查找最长不包含重复字符的子字符串算法示例

    这篇文章主要介绍了Python查找最长不包含重复字符的子字符串算法,涉及Python字符串遍历、统计相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • Python3 多线程(连接池)操作MySQL插入数据

    Python3 多线程(连接池)操作MySQL插入数据

    本文将结合实例代码,介绍Python3 多线程(连接池)操作MySQL插入数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • python读取多类型文件夹中的文档内容

    python读取多类型文件夹中的文档内容

    无论我们使用哪种编程语言,处理文件对于每个程序员都是必不可少的,本文主要介绍了python读取多类型文件夹中的文档内容,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Pytorch中项目配置文件的管理与导入方式

    Pytorch中项目配置文件的管理与导入方式

    这篇文章主要为大家详细介绍了Pytorch中项目配置文件的管理与导入方式的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下
    2025-12-12
  • Python使用正则表达式将多个空格替换为一个空格

    Python使用正则表达式将多个空格替换为一个空格

    这篇文章为大家详细介绍了5种Python处理字符串中连续空格的方法,主要是使用split(),join(),re.sub()等,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-04-04

最新评论