我最近注意到,使用DataFrame
迭代.iloc
行的函数非常慢。我发现有一种叫做.iat
的更快的方法,据说相当于.iloc
。我尝试了它,它将运行时间减少了大约75%。
但是我有点犹豫不决:为什么会有一个"相当于"方法更快?这两者的内部运作之间必然存在一些差异,这是它们存在的原因,而不仅仅是速度更快的原因。我试过到处寻找,但即使是熊猫文档也只是说明了
DataFrame.iat
快速整数位置标量访问器。与iloc类似,iat提供基于整数的查找。您也可以使用这些索引器进行设置。
这并没有帮助。
使用.iat
是否有限制?为什么更快;它更邋??或者我只是切换到使用.iat
,并高兴地忘记.iloc
曾经存在过吗?
答案 0 :(得分:9)
iat
和at
仅使用标量,因此非常快。较慢,更通用的功能是iloc
和loc
。
您可以查看docs:
由于使用 [] 进行索引必须处理很多情况(单标签访问,切片,布尔索引等),因此它需要一些开销才能弄清楚你的内容要求。如果您只想访问标量值,最快的方法是使用 at 和 iat 方法,这些方法在所有数据结构上实现。
与 loc 类似,at提供基于标签的标量查找,而 iat 提供基于整数的查找,类似于 iloc 。
答案 1 :(得分:3)
iat
和at
仅给出单个值输出,而iloc
和loc
可以给出多行输出。
示例:
iloc[1:2,5:8]
有效,但iat[1:2,5:8]
会引发错误