Python 处理数据帧时If语句出错

Python 处理数据帧时If语句出错,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个列,其中的值是负值和正值。如果值为负值,我想加上(24*60)。如果他们是积极的,他们将保持不变。我已经编写了以下代码,但它抛出了一个错误:“序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all() 我尝试了.any()和.all(),但都不起作用 if df_da.loc[i,'Time_diff'] < 0 : df_da.loc[i, "Time_diff"]= df_da.loc[i, "Time_d

我有一个列,其中的值是负值和正值。如果值为负值,我想加上(24*60)。如果他们是积极的,他们将保持不变。我已经编写了以下代码,但它抛出了一个错误:“序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all()

我尝试了.any()和.all(),但都不起作用

    if df_da.loc[i,'Time_diff'] < 0 :
        df_da.loc[i, "Time_diff"]= df_da.loc[i, "Time_diff"]+(24*60)
    else:
        df_da.loc[i, "Time_diff"]= df_da.loc[i, "Time_diff"]
如果df_da.loc[i,'Time_diff']<0:
df_da.loc[i,“时间差”]=df_da.loc[i,“时间差”]+(24*60)
其他:
df_da.loc[i,“时间差”]=df_da.loc[i,“时间差”]
试试这个

df_da["Time_diff"] = (df_da["Time_diff"] < 0)*(24*60) + df_da["Time_diff"]
df_da[“Time_diff”]=(df_da[“Time_diff”]<0)*(24*60)+df_da[“Time_diff”]
这基本上会将24*60添加到所有为不等式返回True的行中。
这不会涉及到外部的for循环,我假设有。

类似于Yash Sharma的答案

df_da['Time_diff'] += 24*60 if df_da['Time_diff'] < 0 else 0
df_-da['Time_-diff']+=24*60如果df_-da['Time_-diff']<0其他0

我找不到错误的来源,可能需要数据帧和
I
的代码

目前公认的答案依赖于将布尔值强制为数字,以及x*0=x这一事实。它不适用于大多数情况,也不是特别容易理解

以下是我将如何做到这一点:

neg_time_diff_idx=df_da['time_diff']<0
df_da.loc[neg_time_diff_idx,'time_diff']=df_da.loc[neg_time_diff_idx,'time_diff']+(24*60)
可简化为:

neg_time_diff_idx=df_da['time_diff']<0
df_da.loc[neg_time_diff_idx,'time_diff']+=24*60

非常感谢,伙计:)它成功了。但是你能解释一下为什么我的代码不起作用吗?这段代码抛出了同样的错误:ValueError:序列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。@shravan我不确定你文章中的代码,但这里的错误原因很明显
df_da['Time_diff']<0
是一个系列,
if
采用单个布尔值。错误消息
序列的真值不明确
意味着“我不知道如何判断整个序列是正确的还是错误的”,这是有道理的。但有趣的是,当我在另一个场合为它工作的相同场景重复使用相同的代码时。这就是混乱开始的原因。如果它在这两种情况下都不起作用,我会接受上面的理由:)python
if
需要一个真/假值,而不是multple。它不会对本系列的每一行计算一次。为了解决您对Yash Sharma的解决方案的问题,您共享的代码可以很好地使用我制作的测试数据帧。具体是哪一行导致了错误?它一定与您的数据帧和变量
i
有关。