Pandas 中的 LOC 与 ILOC:Pandas 中 LOC 和 ILOC 的区别
已发表: 2020-08-01目录
Pandas 中的 Loc 和 iloc
新 Python 开发人员混淆的一个常见原因是 loc 与 iloc。 它们看起来都非常相似并且执行相似的任务。 所以这可能会让任何学生感到困惑。
如果您想找出 iloc 和 loc 之间的区别,那么您来对地方了,因为在本文中,我们将详细讨论这个主题。 您会发现这些功能之间的主要区别是什么,然后查看它们的实际操作以更好地理解这个概念。 查看我们的数据科学课程,了解更多关于 Pandas 的信息。
让我们开始吧。
loc和iloc之间的区别
1. Python中的iloc
您可以在 Python 中使用 iloc 进行选择。 它基于整数位置,可帮助您按位置进行选择。 因此,如果您想查找索引为 5 的行,iloc 将向您显示数据框的第五行,而不管其名称或标签如何。
这是 Python 中 iloc 的示例:
>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
… {'a':100,'b':200,'c':300,'d':400},
… {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> df
A B C D
0 1 2 3 4
1 100 200 300 400
2 1000 2000 3000 4000
我们将使用标量整数索引行。通过对上述数据帧使用 iloc 函数:
>>> 类型(df.iloc[0])
<class 'pandas.core.series.Series'>
>>> df.iloc[0]
一个 1
b 2
3
d 4
名称:0,数据类型:int64
2. 定位于 Pandas
您可以在 Pandas 中使用 loc 通过标签访问多行和多列; 但是,您也可以将它与布尔数组一起使用。
如果您使用 loc 查找索引为 5 的行,您将不会得到第五行。 相反,您只会得到名称为“5”的行。
以下是 Pandas 中 loc 的示例:
>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
… index=['cobra', 'viper', 'sidewinder'],
… 列=['max_speed', 'shield'])
>>> df
max_speed 盾牌
眼镜蛇 1 2
毒蛇 4 5
响尾蛇 7 8
上面是我们将从中提取行的表:
>>> df.loc['毒蛇']
最大速度 4
盾牌 5
名称:毒蛇,数据类型:int64
loc vs iloc的详细示例
即使我们使用这两个函数进行选择,最好还是讨论一个详细的例子来理解它们的区别。
在我们的示例中,我们将使用 kaggle 上提供的电信客户数据集。 我们将其添加到数据框中:
df = pd.read_csv(“项目/churn_prediction/Telco-Customer-Churn.csv”)
df.head()
ID | 性别 | 公民先生 | 伙伴 | 家属 | 任期 | 电话 | 多行 | 互联网 | 安全 | |
0 | 7590-VHVEG | 女性 | 0 | 是的 | 不 | 1 | 不 | 没有电话 | DSL | 不 |
1 | 5575-GNVDE | 男性 | 0 | 不 | 不 | 34 | 是的 | 不 | DSL | 是的 |
2 | 3668-QPYBK | 男性 | 0 | 不 | 不 | 2 | 是的 | 不 | DSL | 是的 |
该数据集有 21 列; 我们只展示了一些用于演示目的。 正如我们已经讨论过的,我们使用 loc 按标签选择数据。 这里,列的名称是它们的列标签,例如性别、任期、OnlineSecurity; 它们都是列名和标签。
由于我们没有分配任何特定的索引,pandas 默认会为行创建一个整数索引。 行标签是整数,从 0 开始向上。 在这个例子中,我们将看到 loc 和 iloc 的行为有何不同。
- 选择“1”行和“合作伙伴”列
df.loc[1, '合作伙伴']
输出:“不”
它显示了“1”行的“合作伙伴”列中的值。
- 选择行标签“4”和列“customerID”和“gender”
df.loc[:4, ['customerID', 'gender']]
客户ID | 性别 | |
0 | 7590-VHVEG | 女性 |
1 | 5575-GNVDE | 男性 |
2 | 3668-QPYBK | 男性 |
3 | 7795-CFOCW | 男性 |
4 | 9237-HQITU | 女性 |
- 选择行标签“1”、“2”、“3”和“Dependents”列
df.loc[[1,2,3], '家属']
1 没有
2 否
3 否
名称:家属,dtype:对象
这一次,我们将过滤数据帧并应用 iloc 或 loc:
- 选择具有合作伙伴的客户的“10”、“PhoneService”和“InternetService”列的行标签(合作伙伴应为“是”)
df [df.Partner == 'Yes'].loc:10, ['PhoneService', 'InternetService']]
在上面的例子中,我们对数据库应用了一个过滤器,但没有更改索引,因此我们的输出省略了过滤器所需的行的多个标签。 因此,通过在这里使用 loc[:10],我们选择了标签最多为“10”的行。

另一方面,如果我们在这里使用 iloc 并应用过滤器,我们将得到 10 行,因为 iloc 按位置选择而与标签无关。 如果我们应用 iloc[:10],我们会得到以下结果:
df[df.Partner == '是'].iloc[:10, [6,8]]
电话服务 | 互联网服务 | |
0 | 不 | DSL |
8 | 是的 | 光纤 |
10 | 是的 | DSL |
12 | 是的 | 光纤 |
15 | 是的 | 光纤 |
18 | 是的 | DSL |
21 | 是的 | 不 |
23 | 是的 | DSL |
24 | 是的 | DSL |
26 | 是的 | 光纤 |
您一定已经注意到我们必须更改选择列的方法。
阅读: Python Pandas 教程
- 使用 iloc 选择前 5 列和前 5 行
df.iloc[:4, :4]
客户ID | 性别 | 老年人 | 伙伴 | |
0 | 7590-VHVEG | 女性 | 0 | 是的 |
1 | 5575-GNVDE | 男性 | 0 | 不 |
2 | 3668-QPYBK | 男性 | 0 | 不 |
3 | 7795-CFOCW | 男性 | 0 | 不 |
我们可以使用 iloc 从末尾选择位置。 为此,我们只需使用负整数(-1、-2 等)并从它们开始。
- 选择最后 5 列和最后 5 行
df.iloc[-5:, -5:]
无纸化计费 | 付款方法 | 月费 | 总费用 | 搅拌 | |
7038 | 是的 | 邮寄支票 | 84.80 | 1990.5 | 不 |
7039 | 是的 | 信用卡 | 103.20 | 7362.9 | 不 |
7040 | 是的 | 电子支票 | 29.60 | 346.45 | 不 |
7041 | 是的 | 邮寄支票 | 74.40 | 306.6 | 是的 |
7042 | 是的 | 银行转帐 | 105.65 | 6844.5 | 不 |
您也可以将 lambda 函数与 iloc 一起使用。 (lambda 函数是 Python 中的一个小型匿名函数,它可以有一个表达式但可以有任意数量的参数)
- 每隔三行选择一次,直到第 15 行,仅显示“互联网服务”和“合作伙伴”列
df.iloc[ lambda x: (x.index x 3 == 0) & (x.index <= 150]['Partner', 'InternetService' ]]
伙伴 | 互联网服务 | |
0 | 是的 | DSL |
3 | 不 | DSL |
6 | 不 | 光纤 |
9 | 不 | DSL |
12 | 是的 | 光纤 |
15 | 是的 | 光纤 |
我们还可以选择介于两者之间的标签或位置。
- 选择 4 到 6 之间的列位置,以及 20 到 25 之间的行位置
df.iloc[20:25, 4:6]
家属 | 任期 | |
20 | 不 | 1 |
21 | 不 | 12 |
22 | 不 | 1 |
23 | 不 | 58 |
24 | 不 | 49 |
现在,如果您尝试将标签传递给 iloc,Pandas 将向您显示以下错误消息:
ValueError:基于位置的索引只能有 [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] 类型
如果您将位置传递给 loc,您将收到类似的错误。
另请阅读:熊猫面试问题
了解有关 Python 的更多信息
学生必须提出问题并找到答案。 我们希望本文能回答您关于 Pandas 中的 loc(或 Python 中的 iloc)的问题。 如果您自己在不同的数据集上尝试这些函数以了解它们的工作原理,那将是最好的。
如果您想了解有关 Python、Pandas 和相关主题的更多信息,请访问我们的博客。 我们的专家在那里添加了多个详细资源。
如果您想了解数据科学,请查看 IIIT-B 和 upGrad 的数据科学执行 PG 计划,该计划是为在职专业人士创建的,提供 10 多个案例研究和项目、实用的实践研讨会、行业专家的指导、1与行业导师一对一,400 多个小时的学习和顶级公司的工作协助。
我们如何添加 Pandas DataFrame 的行?
要在 DataFrame 中插入行,我们可以使用 loc、iloc 和 ix 命令。
1. loc主要用于我们索引的标签。 可以理解为当我们在 loc 4 中插入时,表示我们正在寻找索引为 4 的 DataFrame 条目。
2. iloc 多用于在索引中查找位置。 就好像我们在 iloc 4 中插入,这表明我们正在搜索索引 4 中存在的 DataFrame 条目。
3. ix 的情况很复杂,因为如果索引是基于整数的,我们将标签传递给 ix。 ix 4 表示我们正在 DataFrame 中搜索索引为 4 的值。
什么是 Python 中 Pandas 上下文中的重新索引?
当我们重新索引时,DataFrame 的行和列标签会发生变化。 术语“重新索引”是指将数据与沿单个轴的一组特定标签对齐的过程。 在 Pandas 中,重新索引可用于更改 DataFrame 的行和列的索引。 与许多 pandas 系列或 pandas DataFrame 连接的许多索引数据结构都可以与索引一起使用。
Pandas 中有哪些数据操作?
Pandas中DataFrame有几个重要的数据操作,具体如下:
1. 行列的选择——通过传递行列的名称,我们可以选择DataFrame中的任意行列。 它变成一维的,当您从 DataFrame 中选择它时,它被视为一个系列。
2. 数据过滤——通过使用DataFrame中的一些布尔表达式,我们可以过滤数据。
3. Null 值 - 当没有给项目提供数据时,它们会收到 Null 值。 不同列中不能有值,一般表示为 NaN。