【问题标题】:How can use string as a function method in python?如何在python中使用字符串作为函数方法?
【发布时间】:2019-06-07 07:48:52
【问题描述】:

您好,我正在使用 python,并且有一个数据框 (df),如下所示:

        c      param_values
0   abs_energy  NaN
1   absolute_sum_of_changes NaN
2   agg_autocorrelation [{'f_agg': 'median', 'maxlag': 40}, {'f_agg': ...
3   agg_linear_trend    [{'f_agg': 'max', 'chunk_len': 5, 'attr': 'int...
4   approximate_entropy [{'m': 2, 'r': 0.3}, {'m': 2, 'r': 0.1}, {'m':...

我正在迭代上面的数据框如下:

我有一个导入 from tsfresh.feature_extraction import feature_calculators as fc

for i,v in df[1:].iterrows():
    dispatcher={v["calculators"]:eval(str(fc.v["calculators"]))}
    t = eval(v["calculators"],dispatcher)
    print(t)

但我收到以下错误

AttributeError: module 'tsfresh.feature_extraction.feature_calculators' has no attribute 'v'

我想评估fc.abs_energy,fc.absolute_sum_of_changes,fc.agg_autocorrelation('median','40') 等。 我怎样才能通过迭代上面的数据框找到这个。我曾尝试使用 eval 如上所示,但徒劳无功。请提出一些方法。如果我强调/过分强调某事,请在 cmets 中告诉我。谢谢

【问题讨论】:

  • 该错误是由fc.v["calculators"]) 引起的 - feature_calculators 没有名为v 的属性。由于您没有在其他引用前面加上 v - 您是否打算在那里使用它?您也可以使用getattr 从字符串中查找属性,因此fn = getattr(<module>, v['calculators']) 应该为您提供函数本身的引用,您可以在不使用eval 的情况下调用该函数。

标签: python function methods eval


【解决方案1】:

我认为你必须尝试像这样导入:

from tsfresh.feature_extraction.feature_calculators import abs_energy,absolute_sum_of_changes,agg_autocorrelation

然后像这样在 eval 中使用它:

eval(str(v["calculators"]))

解决方案 2

或者,您可以将 DataFrame 中的数据更改为 fc.abs_energy 而不是 abs_energy,然后直接导入您的模块:

from tsfresh.feature_extraction import feature_calculators as fc

注意

不要忘记将() 连接到您的字符串以调用所需的函数。 例如,您必须像这样调用abs_energy 函数:

eval('abs_energy()')

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2011-01-16
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-03-21
    • 2016-11-11
    相关资源
    最近更新 更多