ホームページ > バックエンド開発 > Python チュートリアル > Pandas シリーズを複数の部分文字列に対して効率的にフィルタリングするにはどうすればよいですか?

Pandas シリーズを複数の部分文字列に対して効率的にフィルタリングするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-23 18:17:20
オリジナル
341 人が閲覧しました

How Can I Efficiently Filter a Pandas Series for Multiple Substrings?

系列内の複数の部分文字列に対する効率的な Pandas フィルタリング

系列に複数の部分文字列のいずれかが含まれているかどうかを判断することは、データ分析における一般的なタスクです。論理和を使用して個々の str.contains 操作を組み合わせると簡単な解決策が得られますが、長い部分文字列リストや大規模なデータフレームの場合は非効率的になる可能性があります。

このタスクを最適化するには、正規表現 (regex) アプローチの採用を検討してください。部分文字列を正規表現パターンでラップすることで、pandas の効率的な文字列一致関数を活用できます。具体的には、部分文字列内の特殊文字をエスケープした後、パイプ文字 (|) を使用して部分文字列を結合することで正規表現パターンを構築できます。

import re

esc_lst = [re.escape(s) for s in lst]
pattern = '|'.join(esc_lst)
ログイン後にコピー

このパターンでは、str を使用して系列をフィルターできます。大文字と小文字を区別しない一致が含まれます:

df[col].str.contains(pattern, case=False)
ログイン後にコピー

このアプローチにより、特に大規模なデータフレームのパフォーマンスが向上します。次の例を考えてみましょう。

from random import randint, seed

seed(321)

# 100 substrings of 5 characters
lst = [''.join([chr(randint(0, 256)) for _ in range(5)]) for _ in range(100)]

# 50000 strings of 20 characters
strings = [''.join([chr(randint(0, 256)) for _ in range(20)]) for _ in range(50000)]

col = pd.Series(strings)
esc_lst = [re.escape(s) for s in lst]
pattern = '|'.join(esc_lst)
ログイン後にコピー

この最適化されたアプローチを使用すると、50,000 行と 100 個の部分文字列に対してフィルタリング操作に約 1 秒かかり、元の質問で説明した方法よりも大幅に高速になります。データフレームや部分文字列リストが大きい場合、パフォーマンスの違いはさらに顕著になります。

以上がPandas シリーズを複数の部分文字列に対して効率的にフィルタリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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