在“string”中的 .str.contains 和“string”之间分析哪个更快

Posted

技术标签:

【中文标题】在“string”中的 .str.contains 和“string”之间分析哪个更快【英文标题】:Which is faster to analyze between .str.contains and "string" in "string" 【发布时间】:2021-12-07 09:27:29 【问题描述】:

我必须在具有数百个条件的数据框中创建一列。这包括查看文本。 :

print(df["Short description"].str.contains("e"))

此代码在一行中有效,但是当我将其与所有其他代码一起包含在我的函数中时,我收到错误:

attributeerror 'str' object has no attribute 'str' 

现在,如果我在函数中执行基本 elseif 但不针对 Dataframe 执行其他所有操作,它可以工作:

"e" in df2["Short description"]: return "things"

所以我需要知道哪个对 Python 来说更快,知道我的函数是:

df2["Deversement Service"] = df2.swifter.apply(conditions, axis=1)

如果与上述类似,条件是数百个。

感谢您的帮助

【问题讨论】:

“我需要知道哪个对 Python 来说更快” - 你可以测试一下:docs.python.org/3.10/library/timeit.html 想了想,可惜条件太多了。而且如果我用几个条件测试,我想也许条件少的快的会变成几百个条件的慢的。我在网上没有找到任何测试 有两种评估性能的基本方法:1) 阅读源代码(在你的例子中是 Pandas 的)并根据所使用的算法推理其复杂性和效率; 2) 通过运行同一段代码数千次并分析运行该代码所花费时间的统计属性(在不同的细节级别)来进行分析和基准测试。您可能不需要深入研究 Pandas 的源代码,因此剩下的选择是基准测试和/或分析 请显示minimal reproducible example。如果错误认为df["Short description"]str,那么df 是什么? 我不知道如何在不提供私人信息的情况下简单地创建等效数据框。数据帧仅包含大写和小写的书面信息。而且我必须查看“简短描述”,因此是手动编写且非常可变的文本字段,因此我查看此列中的值是否包含精确值 【参考方案1】:

df["Short Description"] 的返回值已经是一个 str。不用.str可以直接用.contains("e") 示例:

print(df["Short description"].contains("e"))

【讨论】:

我试过了,但我得到了“AttributeError: 'Series' object has no attribute 'contains'” df["Short Description"] 是一个系列,因为df 是一个DataFrame,而不是一个字典 那么,你同意我必须使用 : "e" in df2["Short description"]: return "things" 吗?

以上是关于在“string”中的 .str.contains 和“string”之间分析哪个更快的主要内容,如果未能解决你的问题,请参考以下文章

python pandas 中的 Str.contains 也标记为空白

使用 str.contains 使用正则表达式检查列中的数值时出错

python、pandas中string.contains的反转

如何使用str.contains函数使用行索引替换单元格值

106Java中String类之使用contains()方法判断子字符串是否存在

LeetCode--String刷题总结