在pandas数据框中使用apply会产生ValueError

时间:2014-11-05 16:29:15

标签: python numpy pandas dataframe

我有一个向量,我想将一个pearson相关性应用于pandas数据帧的所有行。我正在尝试以下方法:

df.apply(apply_func, axis=1, args=(np.array([1,2,3])), raw=True)

应用func只需要两个numpy数组并计算相关性

def apply_func(v1, v2):
     #do stuff

但是当我尝试运行此

时出现以下错误
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我在apply_func设置了断点,我从来没有进入它。我确定我错误地使用了这种结构,但我不确定它是什么。我认为df的每一行都将作为第一个位置参数传递给apply_func,而args中的任何一行都将占用其余部分。这不正确吗?

编辑我在下面创建了一个简单示例,在此示例中,apply_func函数应该只添加两个向量。仍然会产生相同的错误

data = {'k1': [1, 2, 3], 'k2': [4, 5, 6], 'k3': [7, 8, 9]}
df = pd.DataFrame(data)
def apply_func(v1, v2):
    return v1 + v2
df.apply(apply_func, axis=1, args=(np.array([1,2,3])), raw=True)

1 个答案:

答案 0 :(得分:1)

所以能够通过找到以下帖子来解决我自己的问题

python pandas: apply a function with arguments to a series. Update

我的特殊情况产生了一个不同的错误(不明白为什么),但他们的解决方案有效。通过改变

args=(np.array([1,2,3]))

args=(np.array([1,2,3]),)  #<-- NOTE THE COMMA

我确保args是一个元组,它是apply函数所期望的元素,我得到了我期待的结果