2016-06-17 2 views
1

FuzzyWuzzy 라이브러리를 사용하여 모든 결과를 데이터 프레임 열에 저장하는 데 어려움이 있습니다 (루프가 필요할 수도 있습니다). 나는 하루 종일 머리 위로 긁적 거리며, 이제는 당신이 해결책을 도울 수 있는지보고 싶습니다. 슈퍼 도움이 될 것입니다! 내가 할 노력하고있어의 예로서 fuzzywuzzy를 사용하여 데이터 프레임에 일치하는 결과 열 만들기


, 여기에 2 개 데이터 프레임 테이블 ...

마스터 테이블

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

조회 테이블

+--------------+---+ 
| LOOKUP VALUE | - | 
+--------------+---+ 
|    | | 
| Cheese  | - | 
|    | | 
| Salad  | - | 
+--------------+---+ 
입니다

기본적으로 저는 tr입니다. 마스터 테이블의 전체 값 목록에 대해 찾아보기 테이블의 값을 사용하고 결과를 세 번째 테이블에 저장합니다. 여기

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

내가 퍼지 Wuzzy의 가장 기본을 알고 ... 내가 최종 출력이보고 싶은 방법은, 여기에 내가 시작하는 방법은 다음과 같습니다

from fuzzywuzzy import fuzz 
from fuzzywuzzy import process 

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

출력 = [('치킨 샐러드', 90), ('Plain Salad', 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 

는 기본적으로, 나는이 일치 master에서 choices 딕셔너리를 만든 다음 루프 lookups 및 목록으로 결과를 저장합니다. 마지막으로 목록을 DataFrame으로 변환하십시오.

+0

고맙습니다. 100 %는 당신에게 동의합니다. 테이블 구조가 (데이터 프레임에리스트를 삽입하는 것보다) 당신이 준 테이블 구조가 훨씬 낫습니다. 다시 한번 고마워 이것은 파이썬 초급자에게 도움이된다 !! – RedVII

관련 문제