pandas的iloc和iat方法有什么区别?

15
我最近发现,使用.iloc遍历DataFrame行的函数非常慢。我发现有一种更快的方法叫做.iat,据说与.iloc等效。我尝试了一下,运行时间缩短了约75%。
但我还有点犹豫:为什么会有一个“等效”的方法却更快?这两种方法的内部机制肯定存在差异,它们都存在的原因肯定也不是只因为其中一个更快。我已经到处看过,但即使是Pandas文档也只是简单地说明:

DataFrame.iat
快速整数位置标量访问器。

类似于iloc,iat提供基于整数索引的查找。您还可以使用这些索引器进行设置。

这并没有什么帮助。
使用.iat有什么限制吗?为什么更快;是否更粗略?或者我应该只使用.iat,忘记.iloc曾经存在?

3
.iat 只能用于标量,.iloc 可以用于标量和DataFrame,Series -> 更通用 -> 更慢 - jezrael
1
注意事项:如果您经常迭代行,则问题不在于 at vs loc,而是您首先应该很少迭代行 ;-) - JohnE
2个回答

20

iatat 只适用于标量,所以非常快。更慢、更通用的函数是 ilocloc

您可以查看 文档

由于使用 [] 进行索引必须处理很多情况(单标签访问、切片、布尔索引等),因此它具有一定的开销,以便确定您要请求什么。如果您只想访问标量值,则最快的方法是使用所有数据结构上实现的 atiat 方法。

loc 类似,at 提供基于标签的标量查找,而 iat 则提供类似于 iloc 的基于整数的查找。


7

iatat只能输出单个值,而ilocloc可以输出多行
例如:
iloc[1:2,5:8]是有效的,但iat[1:2,5:8]会报错。


2
你能简要解释一下答案吗?请参阅如何撰写好的答案? - Abhinav Kinagi
这是真正的答案! - defend orca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接