[英]Pandas df.apply()
我有一个df:
test2= pd.DataFrame({
'A':[1, 2, 3],
'B':[4, 5, 6],
'C':[7, 8, 9] })
我写了一个简单的 function 为:
def add(a,b,c):
return a+b+c
现在我在我的 df 中使用这个 function 使用 pandas df.apply 方法:
test2.apply(add(test2['A'], test2['B'], test2['C']),axis=1)
它给了我一个错误,说ValueError:一个系列的真值是模棱两可的。 使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
但是当我将代码修改为:
test2.apply(lambda df: add(df['A'],df['B'],df['C']),axis=1)
它工作得很好,给了我预期的结果:
0 12
1 15
2 18
我的问题是,当我事先已经定义了 function 时,为什么还需要 lambda 表达式?
这是因为apply
期望 function 应用于DataFrame
或Series
。 如果您在传递给它的三个Series
对象上调用add
,则根本不需要再调用apply
。 这是因为加法已经适用于Series
对象。 但是,并不是每个 function 都可以这样应用,这就是apply
的用途。
您收到的错误是由于您正在传递一个Series
,而它需要一个 function。
更改您的签名 function:
def add(row):
return sum(row)
out = test2.apply(add, axis=1)
print(out)
# Output:
0 12
1 15
2 18
dtype: int64
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.