首页 > 解决方案 > 在 Python 中的 pandas.Series 的列表中查找子字符串

问题描述

我有一个熊猫数据框,其中一列包含列表。我想搜索每个列表(=每一行)并检查一个或多个元素是否包含特定的子字符串。

数据:

list_Series = pd.Series([["handful of tomatos", "2 peppers", " tsp salt"],
                        ["1 kg of meat", "fresh basil"]])

搜索词:

search_for = ["pepper", "salt"]

'list_Series' 的所需输出:

True
False

现在我想应用一个(可能是矢量化的?)函数来检查一个系列元素是否包含所有搜索子字符串。如果系列只包含字符串而没有列表,我会这样做:pd.Series.str.contains("salt"). 在查看单个列表时,我会执行:

def filterlist(liste, searchwords):
    occurs = 0
    for word in searchwords:
        for string in liste:
            if word.lower() in string.lower():
                occurs += 1
                break 
        if occurs == len(searchwords):                   
            return True

但这是非常笨重且冗长的。而且我想在应用于整个 pd.Series 时效率不是很高。而且我不知道如何将其应用于系列。

谢谢您的帮助!也在寻找反馈,这是我在 stackoverflow 上的第一篇文章!将这个系列转换为数据框会更好吗?

标签: pythonpandas

解决方案


您可以使用嵌套列表推导

result = [listelement for searchtarget in search_for for each_list_in_series in list_Series for listelement in each_list_in_series if searchtarget in listelement]

result将会:

['2 peppers', ' tsp salt']

这等效于,没有列表推导:

result=[]
for searchtarget in search_for:
    for each_list_in_series in list_Series:
        for listelement in each_list_in_series:
            if searchtarget in listelement:
                result.append(listelement)

嵌套列表理解的一个很好的视觉助手,来自Rahul这个问题回答

在此处输入图像描述


推荐阅读