Pandas の s.replace と他の値置換メソッド間のパフォーマンス ギャップを理解する
辞書を使用して Pandas シリーズの値を置換することは、共通のタスク。ただし、この操作に推奨されるメソッドである s.replace は、リスト内包表記などの代替メソッドと比較してパフォーマンスが大幅に低下することがよくあります。
s.replace の遅さの根本原因
s.replace は、単純な辞書マッピングを超える追加の処理を実行します。より複雑で時間のかかる操作が必要となる、特殊なケースやまれな状況に対応します。具体的には、s.replace は辞書をリストに変換し、ネストされた辞書をチェックし、リストを反復処理してキーと値を別の置換関数に入力します。このオーバーヘッドにより、プロセスが大幅に遅くなります。
値の置換の最適化
値の置換を最適化するには、次のガイドラインに従う必要があります:
ベンチマーク
ベンチマークの結果は、さまざまな置換方法間のパフォーマンスの違いを示しています。
テスト 1 - フルMap
%timeit df['A'].replace(d) # 1.98s %timeit df['A'].map(d) # 84.3ms %timeit [d[i] for i in lst] # 134ms
テスト 2 - 部分的なマップ
%timeit df['A'].replace(d) # 20.1ms %timeit df['A'].map(d).fillna(df['A']).astype(int) # 111ms %timeit [d.get(i, i) for i in lst] # 243ms
これらの結果は、s.map とその修正バージョンが s よりも大幅に高速に実行されることを明らかに示しています。 .replace、特に系列値のかなりの部分が辞書キーでカバーされている場合。
以上がPandas の `s.replace` が辞書ベースの値置換で遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。