если список содержит какой-либо из списков, возвращает совпадающую строку - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь создать новый столбец, который сравнивает два списка и возвращает совпадающую строку.

Я получаю сообщение об ошибке "У объекта" list "нет атрибута" 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()

Я хочу, чтобы конечный результат имел новый столбец с именем Бренды, который говорит «Амана», когда в столбце «Описание» есть слова «Амана»

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

В типе списка (фирменные наименования) нет метода или свойства 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.

0 голосов
/ 19 октября 2019

Я не понимаю, почему вы сбиты с толку. В документации find четко указано, что это строковый метод, а не список. Кроме того, он возвращает индекс. Вы изобрели find метод, который возвращает логическое значение и является новым элементом класса list.

Я думаю, что вы хотите

[k for k in raw['Description'] if k in brandnames]

Более прямо, вы могли бысделать это с установленным пересечением. Превратите оба списка имен в наборы, возьмите пересечение и преобразуйте в список.

list(set(raw['Description']) * set(brandnames))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...