Python Pandas中loc和iloc在切片选取时到底有什么区别?

冬瑶君_8701

冬瑶君_8701

2026-09-04

390人浏览

原创

loc是闭区间、按标签索引,iloc是左闭右开、按位置索引;loc参数为标签(如字符串、日期),iloc仅接受整数;二者坐标系不同,混用必报错。

python pandas中loc和iloc在切片选取时到底有什么区别?

loc 和 iloc 在切片时最核心的区别就一句话:loc 是闭区间,iloc 是左闭右开——而且它们根本不在同一个坐标系里工作。

切片边界行为完全不同

df.loc['a':'c'] 会包含索引为 'a''b''c' 的所有行(只要这些标签存在且有序);而 df.iloc[1:4] 只取第 1、2、3 行(不包含第 4 行)。这不是“习惯不同”,是设计契约:loc 按语义找范围,iloc 按内存位置数格子。

  • 当 index 是默认 RangeIndex 且未被修改时,df.loc[0:2]df.iloc[0:3] 看似结果一样,但逻辑完全割裂——前者在查“有没有标签 0/1/2”,后者在拿“第 0/1/2 行”
  • 一旦你执行过 df = df.drop([1])df.loc[0:2] 可能只返回两行(因为标签 1 缺失),而 df.iloc[0:3] 依然稳定返回前三行
  • 对日期索引,df.loc['2023-01':'2023-03'] 合法;df.iloc['2023-01':'2023-03'] 直接报 TypeError

传参类型不能混,一混就报错

你不能把字符串标签塞给 iloc,也不能把整数位置硬塞给 loc——它们的参数校验非常严格。

Python数据分析(免费版)
Python数据分析(免费版)

提供Python数据清洗、统计分析与可视化建议,覆盖业务报表与科研数据的快速处理流程。

下载
  • df.iloc['A']TypeError: cannot do positional indexing,因为 iloc 只接受整数、切片、布尔数组或整数列表
  • df.loc[0] 不是在取“第 0 行”,而是在找 index 值等于 0 的那一行;如果 index 是 ['x', 'y', 'z'],这行直接抛 KeyError
  • df.loc[0, 'colA']df.iloc[0, df.columns.get_loc('colA')] 才是等价写法,后者把列名转成了位置,避免硬编码列号

单元素 vs 列表索引影响返回类型

这个细节在链式操作里极易翻车:类型不对,后续调用 .mean().plot() 就会静默失败或报错。

  • df.iloc[0] 返回 Seriesdf.iloc[[0]] 才返回 DataFrame
  • df.loc['row1'] 返回 Seriesdf.loc[['row1']] 返回 DataFrame
  • 布尔索引也一样:df.loc[df['x'] > 5] 返回 DataFrame,但 df.iloc[df['x'] > 5] 直接报错——iloc 不接受布尔序列作为行索引(除非你先把它转成位置数组)

什么时候该换种写法?

真正需要“按位置选行 + 按标签选列”时,别硬套 lociloc 单层写法。常见替代路径:

  • 先用 iloc 定行,再用 .loc[:, cols] 定列:df.iloc[2:5].loc[:, ['A', 'C']]
  • 更高效:用 df.columns.get_loc() 把列名转位置,喂给 ilocdf.iloc[2:5, [df.columns.get_loc('A'), df.columns.get_loc('C')]],前提是列名唯一
  • 对 MultiIndex,loc 支持元组如 df.loc[('A', 'X'), :]iloc 仍只认扁平位置,没法直接表达层级语义

最易被忽略的一点:当你写 df.loc[...]df.iloc[...] 的瞬间,脑子里必须明确回答——我在数“第几个”,还是在找“叫什么”。答案错了,后面所有计算都不可信。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1531

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

3584

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1549

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

20357

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2527

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2587

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1063

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

576

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2003

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程