2016-06-17 5 views
1

У меня возникает проблема с использованием библиотеки FuzzyWuzzy для хранения всех моих результатов в столбце фрейма данных (я предполагаю, что для этого может потребоваться цикл?). Я весь день расчесывал эту тему, теперь я хочу посмотреть, поможет ли кто-нибудь из вас решить эту проблему! Было бы очень полезно!Использование fuzzywuzzy для создания столбца совпадающих результатов в кадре данных


В качестве примера того, что я пытаюсь сделать, вот 2 кадра данных таблицы ...

Мастер Таблица

+----+-----------------+ 
| ID |  ITEM  | 
+----+-----------------+ 
| |     | 
| 1 | Pepperoni Pizza | 
| |     | 
| 2 | Cheese Pizza | 
| |     | 
| 3 | Chicken Salad | 
| |     | 
| 4 | Plain Salad  | 
+----+-----------------+ 

Таблица поиска

+--------------+---+ 
| LOOKUP VALUE | - | 
+--------------+---+ 
|    | | 
| Cheese  | - | 
|    | | 
| Salad  | - | 
+--------------+---+ 

По существу я tr ying, чтобы использовать значения таблицы соответствия для всего списка значений в таблице «Мастер» и хранить результаты в третьей таблице.

Вот как я хочу, чтобы конечный результат смотреть ...

+--------------+----------------------------+-------------------+ 
| LOOKUP VALUE |  MATCHED VALUES  | MATCHED VALUE IDS | 
+--------------+----------------------------+-------------------+ 
|    |       |     | 
| Cheese  | Cheese Pizza    | 2     | 
|    |       |     | 
| Salad  | Chicken Salad, Plain Salad | 3,4    | 
+--------------+----------------------------+-------------------+ 

Я знаю, что самые основы нечеткого вази, вот как я начал:

from fuzzywuzzy import fuzz 
from fuzzywuzzy import process 

choices = ["Pepperoni Pizza","Cheese Pizza","Chicken Salad", "Plain Salad"] 
process.extract("salad",choices,limit=2) 

Выход = [(«Куриный салат», 90), («Обычный салат», 90)]

Отлично, но как вы это делаете систематическим образом, запустив все мои значения поиска по всем значениям в главной таблице?

Спасибо за тонну за чтение меня!

ответ

2

Не рекомендуется хранить списки в DataFrame, я предлагаю хранить каждое совпадение в виде строки в DataFrame. Вот код:

from fuzzywuzzy import fuzz 
from fuzzywuzzy import process 

import pandas as pd 
import io 

master = pd.read_csv(io.StringIO("""ID,ITEM 
1,Pepperoni Pizza 
2,Cheese Pizza 
3,Chicken Salad 
4,Plain Salad""")) 

lookups = ["Cheese", "Salad"] 

choices = master.set_index("ID").ITEM.to_dict() 

res = [(lookup,) + item for lookup in lookups for item in process.extract(lookup, choices,limit=2)] 
df = pd.DataFrame(res, columns=["lookup", "matched", "score", "id"]) 
df 

выход:

lookup  matched score id 
0 Cheese Cheese Pizza  90 2 
1 Cheese Chicken Salad  45 3 
2 Salad Chicken Salad  90 3 
3 Salad Plain Salad  90 4 

В основном, я создаю choices Dict из master для матча, а затем для автоматического повтора lookups и сохранить результат в виде списка. И, наконец, конвертируем список в DataFrame.

+0

Спасибо, это СОВЕРШЕННО! 100% согласны с вами в том, что более табличная структура (как та, которую вы мне дали) намного лучше, чем вставка списков в фрейм данных (о чем я думал?). Еще раз спасибо, это очень полезно для начинающего Python! – RedVII

Смежные вопросы