2017-09-26 48 views
4

我最近注意到使用.iloc迭代DataFrame行的函數非常慢。我發現有一個更快的方法叫做.iat,據說這相當於.iloc。我試了一下,它將運行時間減少了大約75%。pandas .iloc和.iat之間的區別?

但我有點猶豫:爲什麼有一個「等效」的方法更快?這兩者之間的內在作用必然存在差異,也是兩者存在的原因,而不僅僅是更快的原因。我試着到處尋找,但即使是大熊貓的文件只是說

DataFrame.iat
快速整數位置標訪問。

與iloc類似,iat提供基於整數的查找。您也可以使用這些索引器進行設置。

並沒有幫助。

是否有限制使用.iat?爲什麼更快;它是sloppier?或者我只是切換到使用.iat,並愉快忘記.iloc曾經存在?

+2

'.iat'只標工作,'.iloc'標量+ DF,一系列工作 - >更通用 - > slowier – jezrael

+0

謹慎注意:如果你迭代行很多時候,問題的關鍵不是'在'vs'loc'上,而是你應該很少在第一個地方迭代行;-) – JohnE

回答

4

iatat與標工作而已,所以速度非常快。更慢,更通用的功能是ilocloc

您可以檢查docs

由於與[]必須處理很多案件(單標籤訪問,切片,布爾索引等)的索引,它有一點開銷爲了弄清楚你要求什麼。如果你只是想訪問一個標值,最快的方法就是使用IAT方法,這是對所有的數據結構來實現。

類似於LOC,在提供基於標籤標量查找,同時,IAT提供基於整數查找類似於ILOC