ホームページ >バックエンド開発 >Python チュートリアル >pandas.apply() を使用する必要がある場合 (および使用しない方がよい場合)
pandas.apply() は強力なツールですこれにより、ユーザーは DataFrame または Series の行または列に関数を適用できます。ただし、他の方法よりも遅いことが知られており、いつ使用するべきか、いつ回避すべきかという問題が生じています。この記事では、apply() のパフォーマンス問題の背後にある理由を検証し、その使用を排除する方法に関する実践的なガイドラインを提供します。
apply() は、次の結果を計算します。各行または列を個別に実行するため、ベクトル化された操作が使用できる場合は非効率的になる可能性があります。さらに、apply() では、アライメントの処理、複雑な引数の処理、メモリの割り当てによってオーバーヘッドが発生します。
可能な限りベクトル化された代替手段を使用してください。 ベクトル化NumPy や pandas 独自のベクトル化関数によって提供される演算などは、配列全体を一度に処理するため、パフォーマンスが大幅に向上します。
文字列操作には apply() を使用しないでください。 Pandas は、ベクトル化され、文字列ベースの apply() 呼び出しより高速な、最適化された文字列関数を提供します。
列の展開にはリスト内包表記を使用します。 apply() を使用してリストの列を展開するのは非効率です。リスト内包表記を使用するか、列をリストに変換して pd.DataFrame() に渡すことを推奨します。
DataFrame 用にベクトル化されていない関数 。 Series ではベクトル化されるが、DataFrame ではベクトル化されない関数があります。たとえば、pd.to_datetime() を apply() と組み合わせて使用すると、複数の列を datetime に変換できます。
行単位の処理を必要とする複雑な関数。場合によっては、行単位の処理を必要とする複雑な関数を適用する必要がある場合があります。ただし、これは可能であれば避けてください。
ベクトル化された GroupBy 操作を使用します。 GroupBy 操作には、より効率的なベクトル化された代替手段があります。
連鎖変換の apply() は避けてください。 複数の連鎖GroupBy.apply() 内の操作により、不必要な反復が発生する可能性があります。可能であれば、別の GroupBy 呼び出しを使用してください。
apply() は最初の行を 2 回処理します。 関数に副作用があるかどうかを判断する必要があります。パフォーマンスに影響します。
メモリ消費。 apply() は大量のメモリを消費します。メモリに制約のあるアプリケーションには適していません。
pandas.apply() はアクセス可能な関数ですが、パフォーマンスの制限を慎重に考慮する必要があります。パフォーマンスの問題を回避するには、ベクトル化された代替手段を特定し、文字列操作の効率的なオプションを検討し、他のオプションが使用できない場合は apply() を慎重に使用することが重要です。非効率の背後にある理由を理解することで、開発者は効率的で保守可能な pandas コードを作成できます。
以上がpandas.apply() を使用する必要がある場合 (および使用しない方がよい場合)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。