簡體   English   中英

在 Python 中的 pandas.Series 的列表中查找子字符串

[英]Find substring in list in a pandas.Series in Python

我有一個熊貓數據框,其中一列包含列表。 我想搜索每個列表(=每一行)並檢查一個或多個元素是否包含特定的子字符串。

數據:

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 上的第一篇文章! 將這個系列轉換為數據幀會更好嗎?

您可以使用嵌套列表理解

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這個問題回答

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM