У мене є деякі проблеми із функцією застосування 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
якомога більше. Якщо ви не впевнені, що вам потрібно користуватися ним, ви, ймовірно, цього не зробите. Рекомендую поглянути на те, Коли я коли-небудь хочу використовувати панди, що застосовують () у своєму коді? .