У меня есть некоторые проблемы с функцией применения Pandas при использовании нескольких столбцов со следующим фреймом данных
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
и следующая функция
def my_test(a, b):
return a % b
Когда я пытаюсь применить эту функцию с:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
Я получаю сообщение об ошибке:
NameError: ("global name 'a' is not defined", u'occurred at index 0')
Я не понимаю это сообщение, я правильно определил имя.
Я был бы очень признателен за любую помощь по этому вопросу
Обновить
Спасибо за вашу помощь. Я действительно допустил некоторые синтаксические ошибки с кодом, индекс должен быть поставлен ''. Однако я все еще получаю ту же проблему, используя более сложные функции, такие как:
def my_test(a):
cum_diff = 0
for ix in df.index():
cum_diff = cum_diff + (a - df['a'][ix])
return cum_diff
my_test(a)
не знает, что df
есть, поскольку она не была передана в качестве аргумента (если df
не предполагается, что она глобальная, что было бы ужасной практикой). Вам нужно передать все значения, которые вам понадобятся, внутри функции в качестве аргументов (желательно по порядку), иначе как функция узнает, откуда она df
берется? Кроме того, программирование в пространстве имен, усеянном глобальными переменными, является плохой практикой, поэтому вы не будете ловить подобные ошибки.
apply
как можно больше. Если вы не уверены, что вам нужно его использовать, скорее всего, нет. Я рекомендую взглянуть на то, когда я хочу использовать pandas apply () в своем коде? ,