Как можно использовать строку как метод функции в Python? - PullRequest
0 голосов
/ 07 июня 2019

Привет, я использую 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, как показано выше, но тщетно.Пожалуйста, предложите какой-нибудь метод.Если я что-то подчеркивал / подчеркивал, пожалуйста, сообщите мне об этом в комментариях.Спасибо

1 Ответ

1 голос
/ 07 июня 2019

Я думаю, вы должны попробовать импортировать так:

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()')

...