【问题标题】:Encountering ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()遇到 ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
【发布时间】:2021-07-31 19:55:52
【问题描述】:

我有一个函数

def cruise_fun(speed, accl, acmx, dcmx):
    count = 0
    index = []
    for i in range(len(speed.dropna())):
        if ((speed[i]>40) & (accl[i]<acmx*0.2) & (accl[i]>dcmx*0.2)):
            count +=1
            index.append(i)
                    
    return count, index

这个函数在下面的语句中被调用

cruise_t_all, index_all =cruise_fun(all_data_speed[0], acc_val_all[0], acc_max_all, decc_max_all)

all_data_speedacc_val_all 是 1 列和 38287 行的两个数据帧。 acc_max_alldecc_max_all 是两个 float64 值。我试图尽可能多地实现stackoverflow中提供的解决方案。我同时使用了and&amp;。我无法解决这个问题。

【问题讨论】:

标签: python pandas dataframe valueerror


【解决方案1】:

您以错误的方式使用 pandas。您不应该像您一样遍历所有行。您可以连接提供的列,然后检查条件:

def cruise_fun(speed, accl, acmx, dcmx):
    df = pd.concat([speed.dropna(), accl], axis=1)
    df.columns = ["speed", "accl"]
    mask = (df["speed"] > 40) & df["accl"].between(dcmx * .2, acmx * .2, inclusive=False)
    return mask.sum(), df[mask].index

注意:我做了一些假设:

  • 我假设您的列名没有冲突,否则concat 将不起作用,您需要先重命名您的列
  • 我假设来自speed.dropna()accl 的索引匹配,但如果不是这样,我不会感到惊讶。您应该确保这没问题,或者更好:将所有内容存储在同一个数据框中

【讨论】:

  • 试过了,同样的问题。使用逻辑并抛出 Can only compare identically-labeled Series objects 错误。
  • 您到底尝试了什么?你看过我帖子末尾的评论了吗?您还可以发布确切的错误消息,包括失败的代码行吗?我认为这是 if 语句,但我开始怀疑它......
  • 列名没有冲突,concat 工作得很好。索引确实匹配,都是 38287 行。我按照您建议的方式尝试了该功能。我遇到了以前遇到的相同错误。错误消息是ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 它出现在mask = ((df["speed"] &gt; 40.0) and (decc_max_all * .2 &lt; df["accl"] &lt; acc_max_all * .2)) 这一行。编辑:我现在看到的是编辑后的代码。效果不好,同样的错误。
  • 现在我收到了Can only compare identically-labeled Series objects。我很肯定标签是相同的。我已经尝试过合乎逻辑的and
  • 奇怪的是,函数cruise_fun 可以很好地处理其他类似类型的数据。前一个和替代方案都建议。只有这个特定的数据集让我感到困扰。但是,话又说回来,数据很好,它与其他类型的计算完美配合。
猜你喜欢
  • 1970-01-01
  • 2021-11-28
  • 2021-08-31
  • 2016-12-01
  • 2019-01-24
  • 2021-08-06
  • 2020-05-27
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多