当前位置: 首页 > 知识库问答 >
问题:

Pandas error:ValueError:序列的真值不明确。关于将函数应用于数据帧

顾学真
2023-03-14

我有一个数据帧df,在对其应用函数时给出值错误。

df = pd.DataFrame({
    'ID': range(1, 4),
    'col1': [10, 5, 10],
    'col2': [15, 10, 15],
    'col3': [10, 15, 15],
    'total': [35, 30, 40]
})

print(df)

     ID  col1 col2 col3 total
0     1    10   15   10    35
1     2    5    10   15    30
2     3    10   15   15    40


def round_up(value):
    remainder = value % 5
    if remainder == 0:
        new_val = value
    if remainder == 1:
        new_val = value - 1
    if remainder == 2:
        new_val = value - 2
    if remainder == 3:
        new_val = value + 2
    if remainder == 4:
        new_val = value + 1

    return new_val

df.iloc[:, 1:-1] = df.iloc[:, 1:-1].apply(round_up)

ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

共有1个答案

那铭
2023-03-14

当您在多个列中应用时,您需要使用appymap而不是应用。此外,你的函数圆也可以简化,见下文

df = pd.DataFrame({
    'ID': range(1, 4),
    'col1': [10, 5, 10],
    'col2': [15, 10, 15],
    'col3': [10, 15, 15],
    'total': [35, 30, 40]
})

def round_up(value):
    return (value + 2) // 5 * 5)

df.iloc[:, 1:-1] = df.iloc[:, 1:-1].applymap(round_up)
 类似资料:
  • 我从这个URL刮取了这个表: "https://www.patriotsoftware.com/blog/accounting/average-cost-living-by-state/" 看起来像这样: 然后我编写了这个函数来帮助我将字符串转换成整数: 当我只将函数应用于一列时,它就会工作。我在这里找到了关于在多个列上使用的答案:如何将函数应用于多个列 但我下面的代码不起作用,也不会产生错误:

  • 并将其应用于数据表的一列--这是我希望这样做的: 我还没有找到任何简单的方法,正在努力找出如何做到这一点。一定有一个更简单的方法,比将数据rame转换为和RDD,然后从RDD中选择行来获得正确的字段,并将函数映射到所有的值,是吗?创建一个SQL表,然后用一个sparkSQL UDF来完成这个任务,这更简洁吗?

  • 我有以下函数(一个以列作为输入的热编码函数)。我基本上想把它应用到我的数据框中的一列,但似乎不明白出了什么问题。 猜我怎么称呼它有问题?

  • 怎么办? **添加详细示例如下***

  • 我必须从二维坐标计算希尔伯特曲线上的距离。使用hilbertcurve包,我构建了自己的“hilbert”函数。坐标存储在数据帧(列1和列2)中。如您所见,我的函数在应用于两个值(test)时有效。 然而,它只是不工作时,应用行明智通过应用函数!这是为什么呢?我到底做错了什么?我需要一个额外的列“希尔伯特”,希尔伯特距离在列“col_1”和“col_2”中给出。 最后一个命令以错误结束: 谢谢你的

  • 问题内容: 假设我有一个df包含的列。我定义一个函数: 现在,我要应用f到df的两列,以逐元素的计算新列,有点像: 怎么做 ? 如下添加详细样本 * 问题答案: 这是apply在数据框上使用的示例,我正在用进行调用。 请注意,区别在于,与其尝试将两个值传递给该函数f,不如重写该函数以接受pandas Series对象,然后对Series进行索引以获取所需的值。 根据你的用例,有时创建一个对象然后在