我正在尝试创建一个新列,该列比较两个列表并返回匹配的字符串。
我一直收到错误消息“'列表'对象没有属性'查找'”。
我仍然是一个新手,因此我们将不胜感激!
我正在尝试为此使用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的新列,当“描述”列中包含“ Amana”字样时会显示“ Amana”
非常感谢您!
答案 0 :(得分:0)
我对为什么您感到困惑。 find
文档明确指出这是一个字符串方法,而不是列表。同样,它返回一个索引。您已经发明了一种find
方法,该方法返回布尔值,并且是类list
的新元素。
我想你想要的是
[k for k in raw['Description'] if k in brandnames]
更直接地,您可以通过设置交集来实现。将两个名称列表都变成集合,进行交集,然后转换为列表。
list(set(raw['Description']) * set(brandnames))
答案 1 :(得分:0)
列表类型(品牌名称)中没有“ find”方法或属性,因此Python抛出错误。要快速检查类型中的可用属性和方法,可以使用dir()
,例如:
>>> x = ['abc', 'def']
>>> dir(x)
['__add__', '__class__', '__contains__', '__delattr__', ...
您可能想要的是in
运算符,如Prune的答案。值得考虑的一件事是,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文档。