ホームページ > バックエンド開発 > Python チュートリアル > シリーズ内の辞書ベースの値置換ではどの Pandas メソッドが優れていますか?

シリーズ内の辞書ベースの値置換ではどの Pandas メソッドが優れていますか?

Patricia Arquette
リリース: 2024-11-15 20:01:02
オリジナル
980 人が閲覧しました

Which Pandas Method Outperforms for Dictionary-Based Value Replacement in Series?

Pandas シリーズの値を辞書に置き換える場合のパフォーマンスに関する考慮事項

Pandas シリーズの値を辞書に置き換えることは、コミュニティ。推奨されるメソッドは s.replace(d) または s.map(d) ですが、パフォーマンスはデータセットの特性によって大きく異なる可能性があります。

ベンチマーク

パフォーマンスの違いを説明するために、0 から 0 までのランダムな整数を含む DataFrame df を考えてみましょう。 999.

import pandas as pd, numpy as np

df = pd.DataFrame({'A': np.random.randint(0, 1000, 1000000)})
ログイン後にコピー

一般的なケース

値を後続にマッピングする辞書 d を作成するとします (例: d = {i: i 1 for i in range) (1000)})、次のことを観察します:

# Full-range dictionary
%timeit df['A'].replace(d)  # 1.98s
%timeit df['A'].map(d)  # 84.3ms

# Partial-range dictionary
d = {i: i+1 for i in range(10)}
%timeit df['A'].replace(d)  # 20.1ms
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # 111ms
ログイン後にコピー

最適な方法選択

ベンチマークに基づくと、s.map が両方のシナリオで優れていることは明らかです:

  • フル マップ: s.map(d ) 完全にカバーします。
  • 部分マップ (例: < 5% 値): 欠落している値を埋めるには、s.map(d).fillna(s['A']).astype(int) を使用します。

理由s.replace は遅いですか?

s.replace は s.map よりも広範囲の操作を実行します。これには、辞書をリストに変換し、それを反復処理し、置換を実行する前にネストされた辞書をチェックすることが含まれます。

対照的に、s.map は、指定された引数が辞書または Series であるかどうかを単にチェックし、そうでない場合は変換します。必要。インデックスに基づいて値を効率的にマッピングします。

代替オプション

パフォーマンスが重要な特定の場合:

  • リスト内包表記: リスト内包表記を使用した置換操作の実行は、リスト内包表記よりもわずかに高速になる可能性があります。 s.map.
  • s.apply(pd.to_numeric): このメソッドは、値を欠損データまたは数値以外のデータに置き換えるときのパフォーマンスを大幅に向上させることができます。

結論

Pandas シリーズの値をディクショナリは、DataFrame のサイズ、ディクショナリ内の一意の値の数、マッピングの完全性などの要因によって異なります。これらの要素を慎重に考慮することで、開発者は特定の状況に最も効率的な方法を選択できます。

以上がシリーズ内の辞書ベースの値置換ではどの Pandas メソッドが優れていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート