Pandas ユーザーは通常、既存の列に基づいて新しい列を作成する必要に遭遇します。このタスクでよく使用される 2 つの方法は、Pandas の apply 関数と NumPy のベクトル化です。ただし、これらのアプローチ間の速度の違いは、十分に検討されていない問題です。
観察と実験に基づいて、次のことが予想されます。 np.vectorize は、特に大規模なデータセットの場合、df.apply よりも大幅に高速です。
パフォーマンスのギャップの主な理由は、各アプローチの性質。
df.apply は、DataFrame の各行を反復処理し、指定された関数を評価することによって機能します。これには、Pandas シリーズ オブジェクトの作成と操作が含まれますが、インデックス、値、属性による大きなオーバーヘッドが伴います。
一方、np.vectorize は入力関数をユニバーサル関数 (ufunc) に変換します。 ) NumPy 配列を直接操作します。これにより、高度に最適化され、Python レベルのループを回避するベクトル化された計算が可能になります。
質問の実験は、np の速度の大きな利点を示しています。さまざまなデータセット サイズに合わせて df.apply をベクトル化します。 100 万行の DataFrame の場合、np.vectorize は 25 倍以上高速であることがわかりました。
np.vectorize は一般に高速ですが、考慮すべき重要な注意事項がいくつかあります。
以上がnp.vectorize と Pandas の適用: 大規模なデータセットではどちらが高速ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。