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。