我刚刚开始学习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时我有什么优势?我会很感激每条评论。
答案 0 :(得分:3)
根据pandas docs,iloc
提供:
基于整数的索引,可以按位置进行选择。
因此,如下面的简单示例所示,如果不使用[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
和列名时,同样的逻辑成立。
简短答案:
在索引行和列时使用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