2015-08-26 57 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分钟。 –

相关问题