【问题标题】:Using apply in pandas data frame gives ValueError在 pandas 数据框中使用 apply 会产生 ValueError
【发布时间】:2014-11-05 16:29:14
【问题描述】:

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

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

Apply 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 中的任何内容都会占用其余部分。这不正确吗?

EDIT 我在下面创建了一个简单的例子,在这个例子中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)

【问题讨论】:

    标签: python numpy pandas dataframe


    【解决方案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 函数所期望的,我得到了我所期望的结果

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 2018-12-13
      • 2018-08-22
      • 2012-12-30
      相关资源
      最近更新 更多