39

Pandas で str.contains() 関数を使用して、2 つの部分文字列を一度に検索するより効率的な方法があるかどうか疑問に思っています。「nt」または「nv」のいずれかを含むデータについて、データフレーム内の特定の列を検索したいと考えています。現在、私のコードは次のようになっています。

    df[df['Behavior'].str.contains("nt", na=False)]
    df[df['Behavior'].str.contains("nv", na=False)]

そして、ある結果を別の結果に追加します。私がやりたいのは、1 行のコードを使用して、「nt」または「nv」または「nf」を含むデータを検索することです。用語間にパイプを挿入するなど、うまくいくと思われるいくつかの方法を試してみましたが、これらはすべてエラーになります。ドキュメントを確認しましたが、これはオプションではありません。次のようなエラーが表示されます。

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-113-1d11e906812c> in <module>()
    3 
    4 
    ----> 5 soctol = f_recs[f_recs['Behavior'].str.contains("nt"|"nv", na=False)]
    6 soctol

    TypeError: unsupported operand type(s) for |: 'str' and 'str'

これを行うための速い方法はありますか?助けてくれてありがとう、私は初心者ですが、データラングリングのためにパンダが大好きです。

4

2 に答える 2

68

それらは 1 つの正規表現であり、1 つの文字列である必要があります。

"nt|nv"  # rather than "nt" | " nv"
f_recs[f_recs['Behavior'].str.contains("nt|nv", na=False)]

|Python では、文字列に対して or ( ) 演算子を使用できません。

In [1]: "nt" | "nv"
TypeError: unsupported operand type(s) for |: 'str' and 'str'
于 2013-10-03T22:14:31.867 に答える
-1

私はこれを試してみましたが、うまくいきました:

df[df['Behavior'].str.contains('nt|nv', na=False)]
于 2020-04-21T02:30:50.530 に答える