使用pandas将数据帧作为参数传递

时间:2015-08-07 22:21:11

标签: python numpy pandas

我正在尝试将.apply()与数据帧一起用作参数之一:

df.apply(func, axis=1, args=(df))

当我这样做时,我收到以下错误:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

这是功能:

def func(df): 
  new_val = df.loc[ \
    (df["date"] == self.date + relativedelta(years=1)) & \
    (df["indicator"] == self.indicator), "val"]
  if (len(new_val) == 1):
    new_val = list(new_val)[0] # Extract integer from series
    self["updated_val"] =  new_val - self.val

1 个答案:

答案 0 :(得分:0)

好的,这里的问题是funcapply的组合。数据帧的apply方法将给定函数应用于数据框中的每个COLUMN并返回结果。因此,传递给apply的函数应该将pandas Series或数组视为输入,而不是数据帧。它应该提供一个序列/数组或单个值作为输出。 例如

df.apply(sum) 

sum函数应用于每列,并提供包含该列的系列 每列的结果(通常你会为此做df.sum(),但我只是用它来说明这一点)。

其次,args中的apply参数仅在您传递的函数采用其他参数时使用(除了系列,应该是第一个参数)。例如,您可能有一个对数组求和的函数,然后除以某个数字(再次是一个愚蠢的例子):

def sum_div(array, divisor):
    return sum(array) / divisor

您可能希望将此应用于divisor = 2的数据帧的每一列。 你会做的

df.apply(sum_div, args=[2])

我不确定你想要什么。只是func(df)吗?