2015-08-26 54 views
0

我剛剛拿起了python,我試圖使用模塊fuzzwuzzy與pandas一起協助匹配來自PLACEMENT和CREATIVE_NAME列的名稱。Python循環通過單個單元格和csv中的列

我已經想出瞭如何針對所有CREATE_NAME行測試PLACEMENT的第一行;但是,我無法弄清楚如何移動到PLACEMENT的下一行,並針對CREATIVE_NAME列進行測試。

該項目的最終目標是打印每個PLACEMENT值的最佳匹配以便進一步分析。

df = pd.read_csv(filepath) 
fp = df["PLACEMENT"] 
tp = df["CREATIVE_NAME"] 

score = 0 
x=0 
y=0 
import csv 
with open(filepath, 'r') as f: 
    reader = csv.DictReader(f) 
    for column in reader: 
     if score == 0: 
      score += fuzz.ratio(fp[x],tp[y]) 
      if score > 95: 
       print "The score is %d"", We have a match!" %(score) 
      elif score > 70: 
       print "The score is %d"", We have a high likelihood of a match!" %(score) 
      elif score > 50: 
       print "The score is %d"", The match is not likely!" %(score) 
      else: 
       print "The score is only %d"", This is not a match!" %(score) 
      y += 1 
      score = 0 

回答

0

您基本上需要將展示位置列中的所有條目與廣告素材名稱列中的所有條目進行匹配。這可以通過嵌套循環完成:對於每個展示位置,爲每個廣告素材名稱比較展示位置和廣告素材名稱。

的FuzzyWuzzy庫具有可以使用一個函數調用提取的最佳匹配來代替內環一個方便的功能:

from fuzzywuzzy import process 

for placement in fp: 
    best_matches = process.extract(placement, tp, limit=3) 
    print placement, best_matches 

被警告,雖然,這將需要ň²比較,其中n是數據集中的行數。根據數據集的大小,這可能需要很長時間。

請注意,在通過熊貓讀取數據集到內存中後,您無需打開文件。在重新打開的文件上循環不會使用column循環變量(順便提一下,應該將其稱爲row)。

+0

謝謝,代碼工作完美!非常感謝您的反饋。是的,每列大約有15,000行。我將需要找到一種方法來首先對數據進行分組。 5排花了近20分鐘。 –

相關問題