python - 在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 时有什么优势?我会欣赏每一条评论。
解决方案
根据pandas 文档,iloc
提供:
纯粹基于整数位置的索引,用于按位置进行选择。
因此,如下面的简单示例所示,如果不使用or ,[row, col]
则无法进行索引,因为会抛出 a 。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]]
已使用。在 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]
推荐阅读
- java - 在 xlsx 中自动下载 birt 报告
- elasticsearch - 带有 tls 的 Elasticsearch 集群
- python - XPath 检查 ID 是否存在于下拉列表中。班级检查
- css - Css-Grid / Flexbox 放在一边,main 没有增长 100%
- r - 如何获取详细地址?
- julia - 如何取消引用 GlobalRef?
- c++ - 想用 C++ 文件中的另一个词替换一个词
- swiftui - 如何使用滑动手势在图像滑块内实现导航链接?
- conv-neural-network - 将 MFCC 和梅尔谱图与 CNN 结合使用
- label - ESRI Js API 4.15:FeatureLayer 标签在所有功能上不可见