我有一些问题涉及Pandas中的apply函数,主要是在使用如下数据框时涉及多列。
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
apply
。如果您不确定是否需要使用它,那么您可能不需要。我建议查看何时应该在代码中使用pandas apply()?。 - cs95my_test(a)
不知道df
是什么,因为它没有作为参数传递进来(除非df
应该是全局变量,这将是可怕的做法)。你需要将函数内部需要的所有值作为参数传递(最好按顺序),否则函数怎么知道df
来自哪里呢?此外,在一个充满全局变量的命名空间中编程是不好的实践,你不会捕捉到这样的错误。 - smci