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



这里的python低级技能(使用SAS学习编程(。

我正在尝试将一系列模糊字符串匹配(fuzzywuzzy-lib(公式应用于存储在基本数据帧中的字符串对。现在我对该怎么做感到矛盾。

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

还是应该在一个循环中创建一个数据帧,将公式名称和表达式作为dict?这里的麻烦给了我和上面一样的问题。

这是我的公式dict:

# 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循环中动态命名数据帧、列或值(或者我是否应该这样做(。

我自己想办法已经很久了,但我就是想不出来。任何见解都将不胜感激!非常感谢!

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

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)

我希望这能帮助你。

最新更新