loc和iloc的比较
.loc 和 .iloc 是 pandas 提供的两种不同的索引方法,它们的主要区别在于索引数据的依据:
.loc:- 基于标签的索引,使用 DataFrame 或 Series 的索引标签(即行名和列名)来获取数据。
- 可以使用单个标签、标签列表、标签切片、布尔数组或者 callable 函数作为索引器。
- 如果使用标签索引并且标签不存在,
.loc会抛出一个KeyError。 - 对于切片,包括两端的标签。
.iloc:- 基于位置的索引,使用 DataFrame 或 Series 的整数索引位置来获取数据。
- 可以使用单个整数、整数列表、整数切片、布尔数组或者 callable 函数作为索引器。
- 如果使用整数索引并且位置超出范围,
.iloc会抛出一个IndexError,但切片索引器允许超出范围的索引。 - 对于切片,不包括结束位置的索引,这与 Python 的列表切片行为一致。
简而言之,.loc用于根据数据的实际标签(名称)进行索引,而.iloc用于根据数据的实际位置(整数索引)进行索引。选择哪一种方法取决于您是否知道数据的标签,或者是否需要按照数据的实际位置进行操作。
示例
下面为 .loc 和 .iloc 提供一个例子,以说明它们在 DataFrame 中的使用。
.loc 示例
假设我们有一个 DataFrame,其中包含了某些水果的库存信息,包括它们的种类和数量。DataFrame 的索引是水果的名称,列是 ‘库存数量’。
import pandas as pd
# 创建一个示例 DataFrame
data = {'库存数量': [10, 20, 30, 40]}
df = pd.DataFrame(data, index=['苹果', '香蕉', '樱桃', '梨'])
现在,如果我们想要选择所有库存数量大于 20 的水果,我们可以使用 .loc 和一个布尔数组:
# 使用布尔索引选择库存数量大于 20 的行
selected_fruits = df.loc[df['库存数量'] > 20]
print(selected_fruits)
输出将是:
库存数量
樱桃 30
梨 40
.iloc 示例
使用同一个 DataFrame,如果我们想要选择前两个水果的库存数量,我们可以使用 .iloc 和一个整数列表:
# 使用整数索引选择前两个行的数据
first_two_fruits = df.iloc[[0, 1]]
print(first_two_fruits)
输出将是:
库存数量
苹果 10
香蕉 20
或者,如果我们想要选择前两个水果的库存数量,也可以使用切片:
# 使用切片选择前两个行的数据
first_two_fruits = df.iloc[0:2]
print(first_two_fruits)
输出将是:
库存数量
苹果 10
香蕉 20
请注意,在
.iloc中使用切片时,结束索引是不包含的,这与 Python 的列表切片和.loc的行为不同。
两个结合起来使用:

需要注意的一些问题
在使用 .loc 和 .iloc 进行数据索引时,有些常见的错误需要避免,以确保正确地获取数据。以下是一些需要注意的问题:
- 使用错误的索引方法:
- 使用
.loc时使用整数索引,而不是标签索引。 - 使用
.iloc时使用标签,而不是整数位置索引。
- 使用
- 索引超出范围:
- 使用
.iloc时,提供的整数索引超出 DataFrame 或 Series 的范围。 - 使用
.loc时,提供的标签不存在于 DataFrame 或 Series 的索引中。
- 使用
- 切片包含性误解:
- 对于
.loc,切片包括两端的标签,而对于.iloc,切片不包括结束位置的索引。混淆这一点可能导致意外的结果。
- 对于
- 布尔索引的错误使用:
- 在
.loc或.iloc中使用布尔索引时,错误地将条件表达式写错,导致选择错误的数据行。
- 在
- 对多级索引(MultiIndex)的不正确处理:
- 当 DataFrame 有多级索引时,没有正确地使用元组来指定各级索引,导致选择错误的数据。
- 使用
=赋值而不是==进行比较:- 在布尔索引时,错误地使用
=进行赋值操作,而不是==进行比较。
- 在布尔索引时,错误地使用
- 对
callable索引器的错误使用:- 使用
callable作为索引器时,返回的索引不正确或者与 DataFrame 的形状不匹配。
- 使用
- 在链式索引中不使用括号:
- 当进行链式索引操作时(即连续使用
.loc或.iloc),没有使用括号将索引操作括起来,可能会导致解析错误。
- 当进行链式索引操作时(即连续使用
- 对
None和NaN的混淆:- 在布尔索引中,错误地将
None和NaN混淆,这可能会导致意外的过滤结果。
- 在布尔索引中,错误地将
为了避免这些错误,需要注意的东西:
- 清楚 DataFrame 或 Series 的索引类型(整数索引或标签索引)。
- 在使用索引之前,先检查 DataFrame 或 Series 的索引和列名。
- 在进行索引操作时,确保使用了正确的符号和方法。
- 对于复杂的索引操作,可以使用小范围的测试数据来验证您的索引逻辑是否正确。
- 在进行链式索引时,使用括号来确保正确的执行顺序。














![[16] 使用Opencv_CUDA 实现访问图像像素、直方图均衡化、几何变换](https://img-blog.csdnimg.cn/direct/b50d91de48d24ad98f8aa32b71acca3e.png)




