首页 > 解决方案 > 在pandas和Python中iloc函数有什么优势

问题描述

我刚开始学习 Python 和 Pandas,我在很多教程中看到了 iloc 函数的使用。总是说您可以使用此函数来引用数据框中的列和行。但是,您也可以不使用 iloc 函数直接执行此操作。因此,这是一个产生相同输出的示例:

# features is just a dataframe with several rows and columns
features = pd.DataFrame(features_standardized)

y_train = features.iloc[start:end] [[1]]
y_train_noIloc = features [start:end] [[1]]

这两个语句有什么区别,我在使用 iloc 时有什么优势?我会欣赏每一条评论。

标签: pythonpython-3.xpandas

解决方案


根据pandas 文档iloc提供:

纯粹基于整数位置的索引,用于按位置进行选择。

因此,如下面的简单示例所示,如果不使用or ,[row, col]则无法进行索引,因为会抛出 a 。locilocKeyError

例子:

# Build a simple, sample DataFrame.
df = pd.DataFrame({'a': [1, 2, 3, 4]})

# No iloc
>>> df[0, 0]
KeyError: (0, 0)

# With iloc:
>>> df.iloc[0, 0]
1

loc使用列名时,同样的逻辑也成立。

有什么区别?没有 iloc 的索引何时工作?

简短的回答:在索引行列时
使用loc和/或。如果在行列上建立索引,则无需它就可以逃脱,并且被称为“切片”iloc

但是,我在您的示例中看到[start:end][[1]]已使用。在 pandas 中使用背靠背方括号(例如:)通常被认为是不好的做法[][],并且通常表明应该采用不同(更有效)的方法 - 在这种情况下,使用iloc.

更长的答案:
调整您的[start:end]切片示例(如下所示),索引在仅对行iloc进行索引(切片)时有效。以下示例不使用并将返回第 0 到第 3行。iloc

df[0:3]

输出:

   a
0  1
1  2
2  3

注意 和 的[0:3]区别[0, 3]。前者(切片)使用冒号,将返回0 到 3 的或索引。而后者使用逗号, 并且是[row, col]索引器,需要使用iloc.

旁白:
这两种方法可以像这里展示的那样组合,并将返回第 0 到第 3 行,列索引为 0。而如果使用iloc.

df.iloc[0:3, 0]

推荐阅读