2017-09-26 3 views
4

私は最近、行を反復する関数.ilocを使用する関数が非常に遅いことに気付きました。私は.iatと呼ばれるより速い方法があることを知りました。これは.ilocに相当すると言われています。私はそれを試し、それは実行時間を約75%削減しました。パンダの.ilocと.iatの違いは?

しかし、私は少し躊躇しています:なぜ、より速い「同等の」方法がありますか?これら2つの内部の仕組みと、その両方が存在する理由とより速いものが存在する理由との間には、ある程度の違いがなければならない。私はどこにでも見てみましたが、でもパンダのドキュメントは、ちょうどその

DataFrame.iat
高速整数の場所スカラーアクセサを述べています。

ilocと同様に、iatは整数ベースのルックアップを提供します。これらのインデクサを使用して設定することもできます。

これは役に立ちません。

.iatには制限がありますか?なぜより速いのですか?それはかゆいですか?または、私は.iatを使用して喜んで.ilocを忘れてしまったことに変わりますか?

+2

'、スカラのみを使用.iat''スカラー+ DF、シリーズでの作業.iloc' - >より一般 - > slowier – jezrael

+0

注意注意を:あなたは非常に頻繁に行を反復処理している場合、問題は 'ではありませんat 'vs' loc'ではなく、最初の行をめったに繰り返すべきではありません;-) – JohnE

答えて

4

iatおよびatスカラーだけで動作するため、非常に高速です。遅い、より一般的な関数はiloclocです。

あなたがdocs確認できます。

を[]は例(単一ラベルのアクセス、スライシング、ブールインデックスなど)の多くを処理する必要がありますで索引付けしているので、それはオーバーヘッドのビットでを持っていますあなたが求めているものを理解するためにスカラー値のみにアクセスする場合は、iatメソッドでを使用し、すべてのデータ構造に実装するのが最も速い方法です。

同様LOCに、 IAT をILOCと同様に、整数ベースのルックアップを提供しながら、ラベルベースのスカラールックアップを提供するで。

関連する問題