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

大文字と小文字と特殊文字を処理して、複数の部分文字列の Pandas データフレームを効率的にフィルタリングするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-05 16:50:12
オリジナル
242 人が閲覧しました

How Can I Efficiently Filter a Pandas DataFrame for Multiple Substrings, Handling Case and Special Characters?

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

部分文字列に対するデータフレームのフィルタリングは一般的なタスクですが、大規模なデータセットでは計算コストが高くなる可能性があります。珍しい文字や大文字と小文字を区別しない一致を扱う場合、この課題はさらに複雑になります。

問題:

文字列列を持つ Pandas データフレームが与えられた場合、次のような行を効率的にフィルタリングします。大文字と小文字や特殊文字に関係なく、列には部分文字列のリストが少なくとも 1 つ含まれています。 present.

非効率なアプローチ:

最初のアプローチでは、リスト内の各部分文字列を反復処理し、regex=False と case を指定して str.contains() メソッドを適用しました。 =偽旗。このアプローチは簡単ですが、大規模なデータセットでは時間がかかる可能性があります。

効率的なアプローチ:

より効率的なソリューションでは、正規表現を利用して、エスケープされたすべての文字列を含むパターンを構築します。正規表現パイプ | で結合された部分文字列。次に、str.contains() メソッドを使用して、このパターンが列内の各文字列に対してチェックされます。

import re

lst = ['kdSj;af-!?', 'aBC+dsfa?\-', 'sdKaJg|dksaf-*']
esc_lst = [re.escape(s) for s in lst]
pattern = '|'.join(esc_lst)
df[col].str.contains(pattern, case=False)
ログイン後にコピー

このアプローチは、特にエスケープが必要な大規模なデータセットや部分文字列の場合、反復的なアプローチよりも大幅に高速に実行されます。

パフォーマンス評価:

でのデータセットの使用50,000 個の文字列と 100 個の部分文字列の場合、提案された方法では完了までに約 1 秒かかりますが、反復方法では約 5 秒かかります。いずれかの部分文字列が列の値と一致すると、タイミングはさらに改善されます。

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

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