2017-03-10 4 views
0

파이어 폭스에서 퍼지 매칭 라이브러리를 사용하여 퍼지 매칭을하고있는 팬더 데이터 프레임의 2 열에 비슷한 소리가 나는 이름 집합이 있습니다.파이썬 팬더의 벡터화 함수

import pandas as pd 
from fuzzywuzzy import fuzz 

datt = pd.read_csv("H:\\FuzzyMatch\\data.csv") 

#add column names for each library 
datt['ratio'] = "" 
datt['partial_ratio'] = "" 
datt['partial_token_set_ratio'] = "" 
datt['partial_token_sort_ratio'] = "" 
datt['QRatio'] = "" 
datt['token_set_ratio'] = "" 
datt['token_sort_ratio'] = "" 
datt['UQRatio'] = "" 
datt['UWRatio'] = "" 
datt['WRatio'] = "" 

#save score 
for i in range(datt.shape[0]): 
    datt.ratio.loc[i] = fuzz.ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.partial_ratio.loc[i] = fuzz.partial_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.partial_token_set_ratio.loc[i] = fuzz.partial_token_set_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.partial_token_sort_ratio.loc[i] = fuzz.partial_token_sort_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.QRatio.loc[i] = fuzz.QRatio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.token_set_ratio.loc[i] = fuzz.token_set_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.token_sort_ratio.loc[i] = fuzz.token_sort_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.UQRatio.loc[i] = fuzz.UQRatio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.UWRatio.loc[i] = fuzz.UWRatio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.WRatio.loc[i] = fuzz.WRatio(datt.current_company[i],datt.crm_company_name[i]) 

루프를 피하고 함수의 벡터화 된 형식을 사용할 수 있습니까? 루프의 각 함수에는 2 개의 매개 변수가 필요합니다.

감사합니다.

답변

1

데이터 프레임에 행 방식으로 적용 할 수 있습니다. 여기에 장난감 예입니다

import pandas as pd 
def multiply(x,y): 
    return x*y 

df = pd.DataFrame({"a": range(1,10000), "b": range(1,10000)}) 

df["c"] = df.apply(lambda x: multiply(x.a, x.b), 1) 

이 의지, 내 의견으로는, 당신은 루프를 피함으로써 조금 청소기를 코딩 만든다 -하지만 난이 성능을 향상되지 않습니다 가정합니다.

당신은 numpy.vectorize를 사용을 시도 할 수 있습니다 :

내 장난감 예를 들어
import numpy as np 
df["c"] = np.vectorize(multiply, otypes=["O"]) (df.a, df.b) 

, 이것은 꽤 속도,하지만 난 퍼지 기능을 수반 모르는, 그래서 내가 거기 확실하지 않다.

희망이 있습니다.