当将多个列与以下数据框一起使用时,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
my_test(a)
不知道df
它是什么,因为它没有作为参数传入(除非df
应该是一个全局变量,这将是可怕的做法)。您需要将函数中需要的所有值作为参数传递(最好按顺序),否则该函数如何知道从何df
而来?另外,在充满全局变量的命名空间中进行编程也是一种不好的做法,您不会捕获到此类错误。
apply
。如果不确定是否需要使用它,则可能不需要。我建议看看我什么时候应该在代码中使用pandas apply()?。