web-dev-qa-db-ja.com

データフレームでpandasでstr.contains()を使用する

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

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

そして、ある結果を別の結果に追加します。 1行のコードを使用して、 "nt" OR "nv" OR "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'

これをすばやく行う方法はありますか?助けてくれてありがとう、私は初心者ですが、大好きですpandas=データの乱闘。

27
M.A.Kline

は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'
47
Andy Hayden