使用for循环(fuz zywuzzy)在熊猫列中动态生成对象的名称

问题描述 投票:0回答:1

这里的低级python技能(已学习SAS编程)。

我正在尝试对存储在基本数据帧中的成对字符串应用一系列模糊字符串匹配(fuzzywuzzy lib)公式。现在,我对解决方法感到矛盾。

我应该编写一个循环为每个公式创建一个特定的数据帧,然后将所有这些子数据帧附加到一个循环中吗?这种方法的麻烦似乎在于,由于我无法动态命名子数据帧,因此在循环的每一圈结果值都会被覆盖。

还是我应该在一个循环中创建一个数据框,以我的公式名称和表达式为字典?这里的麻烦给了我与上述相同的问题。

这是我的公式字典:

# ratios dict: all ratios names and functions
ratios = {"ratio": fuzz.ratio, 
          "partial ratio": fuzz.partial_ratio, 
          "token sort ratio": fuzz.token_sort_ratio, 
          "partial token sort ratio": fuzz.partial_token_sort_ratio,
          "token set ratio": fuzz.token_set_ratio,
          "partial token set ratio": fuzz.partial_token_set_ratio
          }

这是我当前出汗的循环:

# for loop iterating over ratios
for r, rn in ratios.items():

    # fuzzing function definition
    def do_the_fuzz(row):
        return rn(row[base_column], row[target_column])

    # new base df containing ratio data and calculations for current loop turn
    df_out1 = pd.DataFrame(data = df_out, columns = [base_column, target_column, 'mesure', 'valeur', 'drop'])
    df_out1['mesure'] = r
    df_out1['valeur'] = df_out.apply(do_the_fuzz, axis = 1)

它给我带来了同样的问题,即'mesure'列被覆盖,并且我最后得到的列充满了最后一个值(此处为'partial token set')。

我的总体问题是,我无法理解是否以及如何在python循环中动态命名数据框,列或值(或者甚至应该这样做)。

我一直在试图自己提出解决方案,时间太长了,我只是想不通。任何见解将不胜感激!提前谢谢了!

python-3.x pandas loops naming fuzzywuzzy
1个回答
0
投票

我将创建一个在每次循环迭代时都会更新的数据框:

final_df = pd.DataFrame()
for r, rn in ratios.items():
    ...
    df_out1 = pd.DataFrame(data = df_out, columns = [base_column, target_column, 'mesure', 'valeur', 'drop'])
    df_out1['mesure'] = r
    df_out1['valeur'] = df_out.apply(do_the_fuzz, axis = 1)

    final_df = pd.concat([final_dfl, df_out1], axis=0)

我希望这可以帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.