Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python str.contains的可扩展解决方案,包含熊猫中的字符串列表_Python_Regex_String_Pandas_Dataframe - Fatal编程技术网

Python str.contains的可扩展解决方案,包含熊猫中的字符串列表

Python str.contains的可扩展解决方案,包含熊猫中的字符串列表,python,regex,string,pandas,dataframe,Python,Regex,String,Pandas,Dataframe,我正在分析一个包含字符串对象行的数据帧df1。我有一个关键字参考列表,需要删除df1中包含参考列表中任何单词的每一行 目前,我是这样做的: 它不能扩展到数千个单词。然而,当我这样做时: 我产生错误第一个参数必须是字符串或编译模式 我尝试了以下解决方案: 这不会引发异常,但不会解析所有单词eather 如何有效地将str.contains与单词列表一起使用?对于可扩展的解决方案,请执行以下操作- 通过正则表达式或管道连接单词的内容 将此信息传递给str.contains 使用结果筛选df1 要为第

我正在分析一个包含字符串对象行的数据帧
df1
。我有一个关键字参考列表,需要删除
df1
中包含参考列表中任何单词的每一行

目前,我是这样做的:

它不能扩展到数千个单词。然而,当我这样做时:

我产生错误第一个参数必须是字符串或编译模式

我尝试了以下解决方案:

这不会引发异常,但不会解析所有单词eather


如何有效地将str.contains与单词列表一起使用?

对于可扩展的解决方案,请执行以下操作-

  • 通过正则表达式或管道连接单词的内容
  • 将此信息传递给
    str.contains
  • 使用结果筛选
    df1
  • 要为第0列编制索引,请不要使用
    df1[0]
    (因为这可能被认为是不明确的)。最好使用
    loc
    iloc
    (见下文)

    注意:如果
    单词
    是一个系列,这也适用


    或者,如果第0列仅包含单词(而不是句子),则可以使用
    df.isin
    ,这应该更快-

    df1 = df1[~df1.iloc[:, 0].isin(words)]
    

    当你说“不可伸缩”时,你的意思是你会有一堆重复的代码吗?如果是这样,请使用循环:
    作为reference\u reference\u list中的单词:
    您尝试过这个问题吗?我首先将这些单词连接起来,并将它们传递给
    str.contains
    。您能详细说明一下:
    它不会引发异常,但不会解析所有单词。
    ?你能举个例子说明它不起作用吗?因为它应该是。@sudonym如果你想在正则表达式上寻找速度,我建议你用10000x的Flasktextspeed@sudonym不客气。你用的是contains还是isin?str.contains,因为我在iloc[:,0]@c中有句子ᴏʟᴅsᴘᴇᴇᴅ 我们应该尝试使用
    flashtext
    发布答案,这听起来很有希望。请问,这是什么意思?r'\b(?:{})\b'@ahbon我正在捕获组中插入您的搜索短语。我只想把完整的单词匹配起来。
    df1 = df1[~df1[0].str.contains(reference_word for reference_word in reference_list)]
    
    reference_list: "words|to|remove" 
    df1 = df1[~df1[0].str.contains(reference_list)]
    
    words = ["words", "to", "remove"]
    mask = df1.iloc[:, 0].str.contains(r'\b(?:{})\b'.format('|'.join(words)))
    df1 = df1[~mask]
    
    df1 = df1[~df1.iloc[:, 0].isin(words)]