pandas For循环内的F字符串

3yhwsihp  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(166)

我不明白为什么这不起作用。我正在尝试执行For循环来保存我的错误度量:

error = []
naive_list = list(['24', '168', 'standard', 'custom'])
for i in naive_list:
    for j in range(1,5):
        rmse = mean_squared_error(df_test["f'Price_REG{j}'"], f'df_test_{i}'["f'Price_REG{j}'"], squared=False)
        mae = mae(df_test["f'Price_REG{j}'"], f'df_test_{i}'["f'Price_REG{j}'"])
        error.append(rmse)
        error.append(mae)

我们的想法是保存所有这16个度量,这样我就可以在以后访问它们,无论是在单独的变量中,在一个法令中,还是在一个列表中。
首先我试着在变量名f'rmse_{i}_{j} = mean_squared_error(df_test["f'Price_REG{j}'"], f'df_test_{i}'["f'Price_REG{j}'"], squared=False)上使用f'string,但显然这是不可能的。所以我试着把它们都放在一个列表中,就像上面一样。但我在f'string KeyError: "f'Price_REG{j}'"上得到了一个错误。

eeq64g8w

eeq64g8w1#

这个df_test["f'Price_REG{j}'"]的字面意思是字符串df_test["f'Price_REG{j}'"]。它不会被进一步计算。它是一个字符串文字。
相反,df_test[f'Price_REG{j}']将被计算,并返回Price_REG{j}中的任何内容,然后从df中提取同名的列。
也就是说,因为f字符串只包含一个变量,所以它在功能上等同于df_test[Price_REG{j}]
你已经把自己画到了一个过度工程的角落里。这里不需要任何f字符串和包含f字符串的字符串文字。只需要变量本身,不需要引号。
而应:

error = []
naive_list = list(['24', '168', 'standard', 'custom'])
for i in naive_list:
    for j in range(1,5):
        rmse = mean_squared_error(df_test[Price_REG{j}], df_test_{i}[Price_REG{j}], squared=False)
        mae = mae(df_test[Price_REG{j}], df_test_{i}[Price_REG{j}])
        error.append(rmse)
        error.append(mae)

但我不确定的是df_test_是什么,或者df_test_{i}是要做什么。我也不完全理解Price_REG{j}的花括号(它们应该是方括号吗?Price_REG是什么?)。但无论如何,至少您摆脱了画角,继续研究代码中可能出现的其他问题。

相关问题