ホームページ >バックエンド開発 >Python チュートリアル >ブールインデックスを使用してパンダデータオブジェクトを効率的にフィルタリングする方法?
データ分析シナリオでは、複数のフィルターを適用して結果を絞り込むことが重要になることがよくあります。この記事の目的は、Pandas データ オブジェクトで複数の比較演算を連鎖させる効率的なアプローチを取り上げることです。
目標は、関係演算子の辞書を処理し、それらを特定の Pandas に追加的に適用することです。シリーズまたはデータフレーム。フィルタリングされたデータセットになります。この操作では、特に大規模なデータセットを扱う場合、不必要なデータのコピーを最小限に抑える必要があります。
Pandas は、ブール インデックスを使用してデータをフィルタリングするための非常に効率的なメカニズムを提供します。ブール型インデックス作成には、論理条件の作成と、これらの条件を使用したデータのインデックス作成が含まれます。次の例を考えてみましょう:
<code class="python">df.loc[df['col1'] >= 1, 'col1']</code>
このコード行は、'col1' 列の値が 1 以上である DataFrame df 内のすべての行を選択します。結果は、次の内容を含む新しい Series オブジェクトです。フィルタリングされた値。
複数のフィルタを適用するには、& のような論理演算子を使用してブール条件を組み合わせることができます。 (と) と | (または)。例:
<code class="python">df[(df['col1'] >= 1) & (df['col1'] <= 1)]
この操作は、'col1' が 1 以上と 1 以下の両方である行をフィルターします。
複数のフィルターを適用するプロセスを簡素化するために、ヘルパー関数を作成できます。
<code class="python">def b(x, col, op, n): return op(x[col], n) def f(x, *b): return x[(np.logical_and(*b))]
b 関数は、指定された列と演算子に対してブール条件を作成し、f は複数のブール条件を DataFrame または Series に適用します。
これらの関数を使用するには、フィルター条件の辞書を提供します。
<code class="python">filters = {'>=': [1], '<=': [1]}</code>
<code class="python">b1 = b(df, 'col1', ge, 1) b2 = b(df, 'col1', le, 1) filtered_df = f(df, b1, b2)</code>
このコードはフィルターを 'col1' に適用します。
Pandas 0.13 では、文字列式を使用してフィルタを適用する便利な方法を提供するクエリ メソッドが導入されました。有効な列識別子の場合、次のコードが可能になります:
<code class="python">df.query('col1 <= 1 & 1 <= col1')</code>
この行は、より簡潔な構文を使用して、前の例と同じフィルタリングを実現します。
ブール型インデックスとヘルパー関数を利用することで、複数のフィルターを Pandas データフレームとシリーズに効率的に適用できます。このアプローチにより、特に大規模なデータセットを操作する場合に、データのコピーが最小限に抑えられ、パフォーマンスが向上します。
以上がブールインデックスを使用してパンダデータオブジェクトを効率的にフィルタリングする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。