Pandas中iloc[]与loc[]的用法详解:区别、实例与注意事项

更新时间:2026-10-10 09:59:56 来源:本站整理 浏览:0

一、iloc[]与loc[]的区别

在Pandas中,iloc[]和loc[]是两种核心的数据索引与切片方法,它们的根本区别在于索引依据不同: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[]都支持可调用对象,例如df.loc[lambda df: df['列名'] > 0]。

二、实例演示

为了更清晰地体现区别,先创建一个行索引为自定义标签的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

三、注意事项

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

测试:你能读懂这句程序吗?

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

这句代码的含义是:在numerical_df中,对于满足“A列小于B列”条件的行,将A列的值设置为100。它结合了布尔索引和列定位,是loc[]的典型应用。

原文链接:本站整理

本文来自互联网用户投稿,该文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 service@2cto.cc 进行投诉反馈,一经查实,立即处理!