当前位置: 首页 > 知识库问答 >
问题:

加速循环过滤字符串[重复]

曹波鸿
2023-03-14

我想通过删除那些不包含关键字/s的tweets来过滤pandas dataframe中包含tweets的列(3+100万行)。为此,我运行以下循环(对不起,我是python新手):

filter_word_indicators = []
for i in range(1, len(df)):
    if 'filter_word' in str(df.tweets[0:i]):
        indicator = 1 
    else:
        indicator = 0
    filter_word_indicators.append(indicator)

这个想法是,如果指示器等于0,就会删除推文。问题是这个循环要花很长时间才能运行。我肯定有一个更好的方法来删除不包含我的“filer_word”的推文,但我不知道如何编码。任何帮助都会很好。

共有1个答案

缑勇锐
2023-03-14

签出pandas.series.str.contains,您可以如下所示使用它。

df[~df.tweets.str.contains('filter_word')]
In [0]: df = pd.DataFrame(
            [[1, "abc"],
             [2, "bce"]],
            columns=["number", "string"]
        )    
In [1]: df
Out[1]: 
   number string
0       1    abc
1       2    bce

In [2]: df[~df.string.str.contains("ab")]
Out[2]: 
   number string
1       2    bce

对下面的合成数据进行了一个小的计时测试,其中包含300万个tweet大小的随机字符串

df = pd.DataFrame(
    [
        "".join(random.choices(string.ascii_lowercase, k=280))
        for _ in range(3000000)
    ],
    columns=["strings"],
)

和关键字abc,比较原始解决方案、map+regex和本文提出的解决方案(str.contains)。结果如下。

original       99s
map + regex    21s
str.contains  2.8s
 类似资料:
  • 我用字符串变量在java中创建了一个for循环。我想向变量添加一个字符,直到该变量等于一组字符。我创建了for循环。控制台中没有显示错误。但是也没有输出”(我哪里错了?

  • 在映射上分配一些默认值 我知道我需要在地图中添加值 问题是我的循环不起作用。我需要从地图中添加value2,基于从那里的位置或从地图中添加value2

  • 对于以下字符串,大小输出不正确。为什么会这样?我该如何解决? 我试着逐字符遍历str,这样我就可以把它读入向量

  • 问题内容: 我正在研究AngularJS教程,并了解的基础知识 但是,开箱即用的实现似乎仅限于将项目列表过滤为输入的确切单词或短语。 示例:如果查询是“ table cloth”,则结果列表可以包含带有短语“ Decorative table cloth”的结果,但由于过滤器只是一个连续的搜索字符串,因此将不包括“ Table fortable装饰布”。 我知道可以添加自定义过滤器,但乍一看似乎主

  • 问题内容: 我有这样的课 我在我的参考 我的是根据Firebase查询的类生成的字典数组。然后,我得到了从另一个视图控制器(该函数是集合视图)生成的字符串。我想获取该字符串,然后使用与我之前的字符串相等的字符串过滤或搜索数组。然后删除不等于。不仅对象,而且包含非等键,值对的整个数组。我已经找了几天了,但我坚持过滤从类创建的字典数组。我已经看过并尝试过NSPredicates,for- in循环,但

  • 问题内容: 我喜欢过滤掉字符串长度不等于10的数据。 如果我尝试过滤掉列A或B的字符串长度不等于10的任何行,则尝试这样做。 这工作缓慢,但正在工作。 但是,当A中的数据不是字符串而是数字(有时在read_csv读取输入文件时解释为数字)时,有时会产生错误。 我相信应该有更高效,更优雅的代码来代替。 根据下面的答案和评论,我找到的最简单的解决方案是: 要么 要么 问题答案: 应用于filex.cs