Python循环通过csv中的单个单元格和列

Python循环通过csv中的单个单元格和列,python,pandas,iterator,iteration,Python,Pandas,Iterator,Iteration,我刚刚学习了python,我正在尝试将fuzzwuzzy模块与pandas结合使用,以帮助匹配PLACEMENT和CREATIVE_NAME列中的名称 我已经想出了如何测试第一行的位置对所有行的创意_名称;但是,我不知道如何移动到下一行位置,并针对CREATIVE_NAME列进行测试 我这个项目的最终目标是打印出每个位置值的最匹配项,以供进一步分析 df = pd.read_csv(filepath) fp = df["PLACEMENT"] tp = df["CREATIVE_NAME"]

我刚刚学习了python,我正在尝试将fuzzwuzzy模块与pandas结合使用,以帮助匹配PLACEMENT和CREATIVE_NAME列中的名称

我已经想出了如何测试第一行的位置对所有行的创意_名称;但是,我不知道如何移动到下一行位置,并针对CREATIVE_NAME列进行测试

我这个项目的最终目标是打印出每个位置值的最匹配项,以供进一步分析

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

您基本上需要将placement列中的所有条目与creative name列中的所有条目进行匹配。这可以通过嵌套循环完成:对于每个放置,对于每个创作名称,比较放置和创作名称

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

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。

谢谢,代码工作得非常好!非常感谢您的反馈。是的,每列大约有15000行。我需要先找到一种方法来对数据进行子集划分。5排花了将近20分钟。