Pandas中iloc[]与loc[]的用法详解:区别、实例与注意事项
一、iloc[]与loc[]的区别
在Pandas中,iloc[]和loc[]是两种核心的数据索引与切片方法,它们的根本区别在于索引依据不同:iloc[]基于整数位置,而loc[]基于标签(行索引名或列名)。
注意: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 751. iloc取单行 / loc取单列
iloc(按整数位置):行位置0对应“张三”,列位置0对应“数学”。
data.iloc[0] # 取第1行(位置0)
# 输出:
# 数学 90
# 英语 88
# Name: 张三, dtype: int64loc(按标签):直接用行标签“张三”或列名“数学”。
data.loc['张三'] # 取标签为“张三”的行
# 输出同iloc[0]2. iloc取多行 / loc取多列(切片)
iloc(左闭右开):0:2仅包含位置0、1(对应“张三”“李四”)。
data.iloc[0:2] # 取位置0到2(不含2)的行
# 输出:
# 数学 英语
# 张三 90 88
# 李四 85 92loc(包含终点):'张三':'王五'包含所有标签在“张三”到“王五”之间的行。
data.loc['张三':'王五'] # 取标签从“张三”到“王五”的行(含王五)
# 输出:
# 数学 英语
# 张三 90 88
# 李四 85 92
# 王五 78 753. 取特定行+列(二维索引)
iloc(行位置+列位置):行位置1(李四)、列位置1(英语)。
data.iloc[1, 1] # 取第2行(位置1)、第2列(位置1)的值
# 输出:92loc(行标签+列名):行标签“李四”、列名“英语”。
data.loc['李四', '英语'] # 取“李四”行、“英语”列的值
# 输出:924. 布尔索引(按条件取数)
两者都支持布尔数组,但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 进行投诉反馈,一经查实,立即处理!
下一篇:Python执行多行cmd命令:单&与双&&的区别详解