在pandas中使用带有数据帧的str.contains()

M.A*_*ine 27 python string performance dataframe pandas

我想知道是否有更有效的方法在Pandas中使用str.contains()函数,一次搜索两个部分字符串.我想在数据框中搜索包含"nt"或"nv"的数据的给定列.现在,我的代码看起来像这样:

    df[df['Behavior'].str.contains("nt", na=False)]
    df[df['Behavior'].str.contains("nv", na=False)]
Run Code Online (Sandbox Code Playgroud)

然后我将一个结果追加到另一个.我想做的是使用一行代码来搜索包含"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'
Run Code Online (Sandbox Code Playgroud)

有没有快速的方法来做到这一点?感谢您的帮助,我是初学者,但我喜欢数据争夺的熊猫.

And*_*den 47

这是一个正则表达式,应该在一个字符串中:

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

Python不允许你|对字符串使用or()运算符:

In [1]: "nt" | "nv"
TypeError: unsupported operand type(s) for |: 'str' and 'str'
Run Code Online (Sandbox Code Playgroud)

  • @ jaknap32:如果你使用`(?x)`修饰符,你可以在任何你想要的地方添加空格 - ""(?x)nt | nv"` - (但是如果你在模式中有有意义的空格,你将需要逃脱他们,以及`#`char).参见[Python`re.X` docs](https://docs.python.org/2/library/re.html#re.VERBOSE).无论如何,`n [tv]`是比`nt | nv`更好的正则表达式. (3认同)
  • 谢谢这样的美!但是要注意,管道和搜索条件之间不能有空格! (2认同)