Получите больше похожих слов на основе Pandas DataFrame и списка

Я хочу вернуть новый столбец в моем кадре данных со словом, более похожим на значение моего столбца pandas (в данном случае col1). Мой фактический фрейм данных:

введите здесь описание изображения

И у меня есть следующий список:

['Product_A1', 'Product_B1', 'Product_C']

И мой вывод должен быть:

введите здесь описание изображения

Для этого я использую следующий код (я просто печатаю результаты):

import pandas as pd
import difflib
d = {'col1': ['Product_Z1', 'Product_A', 'Product_B'], 'col2': [1, 2, 3]}
df = pd.DataFrame(data=d)
products_list = ['Product_A', 'Product_B', 'Product_C']
print(difflib.get_close_matches(df['col1'], products_list))

Однако я всегда получаю пустой список...

Что я делаю неправильно?

Спасибо!


person Pedro Alves    schedule 22.11.2019    source источник
comment
Если есть определенный шаблон, вы можете сравнить подмножество строк или использовать регулярное выражение.   -  person jimfawkes    schedule 22.11.2019
comment
Ответ Хьюго Сальвадора ниже содержит ответ на ваш вопрос, что я делаю неправильно, но просто для уточнения: первый аргумент get_close_matches должен быть строкой, а не списком строк.   -  person RishiG    schedule 22.11.2019


Ответы (1)


Попробуй это:

df['col3'] = df['col1'].apply(lambda x : difflib.get_close_matches(x, products_list, cutoff=0.9))

Проблема с вашим решением заключается в том, что функция get_close_matches ищет весь столбец в списке_продуктов. Добавьте строки ниже и посмотрите:

In [8]: products_list2 = [['Product_Z1', 'Product_A', 'Product_B'], ['test']]

In [9]: difflib.get_close_matches(df['col1'], products_list2)
Out[9]: [['Product_Z1', 'Product_A', 'Product_B']]
person Hugo Salvador    schedule 22.11.2019
comment
Хороший ответ, насколько код идет. Можно немного улучшить, явно ответив на вопрос, что пошло не так? и включая ссылку на difflib.get_close_matches документацию. - person RishiG; 22.11.2019