Ошибка при использовании функции с @jit (nopython = True) для операций с Python датафреймом - PullRequest
0 голосов
/ 04 мая 2020

У меня есть фрейм данных, содержащий более 1 миллиона строк и состоящий из исторических цен актива. Я хочу выполнить некоторые операции со столбцами этого фрейма данных, и для этого я создал функцию take_decision , которая принимает некоторые из столбцов в качестве входных данных.

df - это фрейм данных, содержащий всю информацию, которую я должен передать своей функции. Он содержит более 1 миллиона строк и 22 столбца (только 3 из них передаются в функцию).

Что я получаю из функции, так это столбец логических данных в зависимости от значения condition1 и condition2. Возвращаемый кадр данных имеет тот же 1 миллион + номер столбца.

Функция take_decision работает нормально, но когда я пытаюсь скомпилировать ее с помощью Numba, чтобы ускорить вычисления, я получаю сообщение об ошибке ниже.

Входные данные для функции - это просто столбцы данных, содержащие целые числа (в частности, числа от 0 до 100). Различные условия создаются на основе сравнения всех элементов различных столбцов.

Код будет выглядеть так:

from numba import jit

...

@jit(nopython=True)
def take_decision(session, entry_, exit_): #the inputs are columns of dataframe containing integers
    condition1 = ~((session < entry_) | (entry_== exit_))
    condition2 = ((entry_ <= exit_))
    return condition1 & condition2

positions = pd.DataFrame()
positions['Current'] = take_decision(df['Session'], df['entry_'], df['exit_'])

Я получаю ошибку:

TypingError: non-precise type pyobject
[1] During: typing of argument at <ipython-input-821-165a0522266c> (3)

Что я делаю не так и как я могу это исправить?

...