Pandas loc[] 与 iloc[] 区别详解 索引切片用法对比及实战避坑

AI 概述
文章介绍了 Pandas 中 iloc[] 和 loc[] 的核心区别:iloc 是基于整数位置选择数据,切片规则为左闭右开;loc 则基于行、列标签选择数据,切片规则包含终点。文章通过对比表与具体实例,演示两者的用法及适用场景,帮助读者正确掌握数据索引和切片技巧,避免常见误区。
目录
文章目录隐藏
  1. 一、区别对比
  2. 二、实例演示(构造带自定义标签的 DataFrame)
  3. 三、注意点
  4. 测试:看你是否能读懂这句程序:
  5. 结语

Pandas loc[] 与 iloc[] 区别详解 索引切片用法对比及实战避坑

在 Pandas 数据处理中,iloc[]loc[]是数据索引、切片的核心方法,也是新手最易混淆的知识点。二者核心差异在于索引依据:iloc 基于整数位置取数,loc 基于标签取数,同时切片规则、适用场景也完全不同。本文通过清晰对比与实例演示,精准拆解两者区别,帮你彻底掌握数据选取技巧,避开使用坑点。以下分点对比并结合实例说明:

一、区别对比

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

注:Pandas 的 “列标签” 和 “行标签” 分别对应DataFrame.columnsDataFrame.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

结语

熟练区分iloc[]loc[],是提升 Pandas 数据处理效率的关键。牢记 iloc 按整数位置、左闭右开,loc 按标签、包含终点的核心规则,根据物理顺序或命名需求选择对应方法,就能高效完成数据选取。掌握以上用法与注意事项,可轻松应对各类数据索引场景,避免操作失误。

以上关于Pandas loc[] 与 iloc[] 区别详解 索引切片用法对比及实战避坑的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » Pandas loc[] 与 iloc[] 区别详解 索引切片用法对比及实战避坑

发表回复