J'ai des problèmes avec la fonction d'application Pandas, lorsque j'utilise plusieurs colonnes avec le cadre de données suivant
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
et la fonction suivante
def my_test(a, b):
return a % b
Lorsque j'essaie d'appliquer cette fonction avec:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
Je reçois le message d'erreur:
NameError: ("global name 'a' is not defined", u'occurred at index 0')
Je ne comprends pas ce message, j'ai bien défini le nom.
J'apprécierais grandement toute aide sur cette question
Mettre à jour
Merci de votre aide. J'ai en effet fait quelques erreurs de syntaxe avec le code, l'index devrait être mis ''. Cependant, je reçois toujours le même problème en utilisant une fonction plus complexe telle que:
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)
ne sait pas ce qu'elle df
est car elle n'a pas été passée en argument (sauf si elle df
est supposée être globale, ce qui serait une pratique terrible). Vous devez passer toutes les valeurs dont vous aurez besoin dans une fonction comme arguments (de préférence dans l'ordre), sinon comment la fonction pourrait-elle savoir d'où df
vient-elle? De plus, c'est une mauvaise pratique de programmer dans un espace de noms jonché de variables globales, vous n'attraperez pas d'erreurs comme celle-ci.
apply
autant que possible. Si vous n'êtes pas sûr de devoir l'utiliser, ce n'est probablement pas le cas. Je recommande de jeter un œil à Quand devrais-je jamais vouloir utiliser pandas apply () dans mon code? .