首页 > 解决方案 > 如果列表包含任何列表返回匹配字符串

问题描述

我正在尝试创建一个比较两个列表并返回匹配字符串的新列。

我不断收到错误“'list' object has no attribute 'find'”。

我仍然是这方面的新手,所以任何帮助都将不胜感激!

我正在尝试为此使用 python 和 pandas

到目前为止我所拥有的是

raw = pd.read_csv(r"")
brandnames = ['Amana','Maytag']

raw['Brands'] = [k for k in raw['Description'] if brandnames.find(k)]

raw.head()

我希望最终结果有一个名为 Brands 的新列,当 Description 列包含“Amana”字样时,该列会显示“Amana”

太感谢了!

标签: pythonpandas

解决方案


列表类型(品牌名称)中没有“查找”方法或属性,因此 Python 会抛出错误。要快速检查类型中的可用属性和方法,您可以使用dir(),例如:

>>> x = ['abc', 'def']
>>> dir(x)
['__add__', '__class__', '__contains__', '__delattr__', ...

您可能想要的是inPrune 答案中的运算符。值得考虑的一件事是,只有在找到完全匹配的情况in下才会返回:True

>>> brandnames = ['Amana', 'Maytag']
>>> 'Amana' in brandnames
True
>>> 'Amana ' in brandnames
False
>>> 'amana' in brandnames
False
>>> 'Amanaa' in brandnames
False

要考虑的另一件事是,您可能需要对返回的结果进行额外的更改,pd.read_csv然后才能in对其使用运算符。

>>> some_data = "foo bar baz Maytag"
>>> [i for i in some_data.split(' ') if i in brandnames]
['Maytag']

type()在您的程序中调用raw可能会起作用,但如果没有,我建议您查看 Pandas 文档。


推荐阅读