ホームページ  >  記事  >  バックエンド開発  >  Pandas シリーズでディクショナリを使用して値を置換すると遅いのはなぜですか?また、パフォーマンスを向上させるにはどうすればよいですか?

Pandas シリーズでディクショナリを使用して値を置換すると遅いのはなぜですか?また、パフォーマンスを向上させるにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-13 05:46:02651ブラウズ

Why is Using Dictionaries to Replace Values in Pandas Series Slow, and How Can You Improve Performance?

辞書を使用した Pandas シリーズの値置換のパフォーマンスの向上

辞書を使用した Pandas シリーズの値の置換は一般的なタスクです。 s.replace(d) を使用して値を置換することをお勧めしますが、単純なリスト内包表記を使用するよりも大幅に遅くなる可能性があります。

パフォーマンス低下の原因

パフォーマンスの低下s.replace(d) の機能は、エッジケースやまれな状況の処理に由来しています。これには以下が含まれます:

  • 辞書をリストに変換する。
  • リストを反復処理し、ネストされた辞書をチェックする。
  • キーと値の反復子をreplace 関数。

代替方法

パフォーマンスを向上させるには、次の方法の使用を検討してください:

  • フルマップ: 系列内のすべての値が辞書によってマップされる場合は、s.map(d) を使用します。この方法は効率的で、一貫して高速です。
  • 部分マップ: 値のごく一部 (たとえば、5% 未満) のみが辞書によってマップされる場合は、 s.map(d ).fillna(s['A']).astype(int)。このアプローチでは、マッピングと充填を組み合わせて、高価な反復の必要性を回避します。

ベンチマーク

ベンチマークは、s.replace(d)、s のパフォーマンスの違いを示しています。 .map(d)、およびリストの内包表記:

##### Full Map #####

d = {i: i+1 for i in range(1000)}

%timeit df['A'].replace(d)                          # Slow (1.98s)
%timeit df['A'].map(d)                              # Fast (84.3ms)

##### Partial Map #####

d = {i: i+1 for i in range(10)}

%timeit df['A'].replace(d)                          # Intermediate (20.1ms)
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # Faster (111ms)

これにより、完全または部分的なマッピングでは、s.map(d) が s.replace(d) よりも一貫して高速であることがわかります。

結論

辞書の網羅度に応じて、s.map(d) または s.map(d).fillna(s['A']).astype(int) Pandas シリーズで効率的に値を置換するには、s.replace(d) よりも優先する必要があります。

以上がPandas シリーズでディクショナリを使用して値を置換すると遅いのはなぜですか?また、パフォーマンスを向上させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。