iloc函数在熊猫和Python中有什么优势

时间:2020-10-21 09:57:03

标签: python python-3.x pandas

我刚刚开始学习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时我有什么优势?我会很感激每条评论。

1 个答案:

答案 0 :(得分:3)

根据pandas docsiloc提供:

基于整数的索引,可以按位置进行选择。

因此,如下面的简单示例所示,如果不使用[row, col]loc,就无法进行iloc索引,因为会抛出KeyError

示例:

# 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]]。通常在大熊猫中使用背对背方括号(例如:[][])被认为是不好的做法,并且通常表明应采用其他(更有效的)方法-在这种情况下,使用{ {1}}。

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

iloc

输出:

df[0:3]

请注意 a 0 1 1 2 2 3 [0:3]的区别。前者(切片)使用冒号,并将返回或索引0到3。而后者使用逗号,并且是{ {1}}索引器,需要使用[0, 3]

在旁边:
可以将这两种方法组合在一起,如此处所示,它们将返回0到3行(列索引为0)。而如果不使用[row, col],则 是不可能的。

iloc