Python循环遍历csv

时间:2015-08-26 11:12:19

标签: python pandas iterator iteration

我刚拿起python,我正在尝试使用模块fuzzwuzzy与pandas一起协助匹配PLACEMENT和CREATIVE_NAME列中的名称。

我已经想出如何针对CREATIVE_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

1 个答案:

答案 0 :(得分:0)

您基本上需要将展示位置列中的所有条目与广告素材名称列中的所有条目进行匹配。这可以通过嵌套循环来完成:对于每个展示位置,对于每个广告素材名称,请比较展示位置和广告素材名称。

FuzzyWuzzy库有一个便利函数,可用于通过提取最佳匹配的单个函数调用来替换内部循环:

from fuzzywuzzy import process

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

请注意,这需要 n ²比较,其中 n 是数据集中的行数。根据数据集的大小,这可能需要很长时间。

请注意,在通过pandas将数据集读入内存后,无需打开文件。您重新打开文件的循环不会使用column循环变量(顺便说一下,它应该被称为row。)