If-else ValueError Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

Posted

技术标签:

【中文标题】If-else ValueError Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()【英文标题】:If-else ValueError The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all() 【发布时间】:2019-12-11 14:25:26 【问题描述】:

我正在尝试使用 if-else 条件填充缺失值,但出现值错误 我该如何解决? 我阅读了另一篇类似的帖子,但不适用于我的问题

我已经尝试过 if-else(值错误),并且还使用 for 循环遍历索引

使用for循环时,它只通过if语句运行所有行,而不是else

只有 if else 语句(值错误)

if data['Waiting Time'] > 0:
    data['Existing_Date'].fillna(data['New_time'],inplace=True) #if wait_time > 0         
else:
    data['Existing_Date'].fillna(data['Actual Date'],inplace=True) #if wait_time > 0

使用 For 循环索引(只运行 if 语句)

for i in data.index:
    if data['Waiting Time'].iloc[i] > 0:
        data['Existing_Date'].fillna(data['New_time'],inplace=True) #if wait_time > 0    
    else:
        data['Existing_Date'].fillna(data['Actual Date'],inplace=True) #if wait_time = 0

与if only语句的值错误

带有for循环:只产生if语句,不去else语句

我该如何解决这个问题?谢谢

【问题讨论】:

您介意分享错误的 TraceBack 吗? 您能否举一个小例子说明data 之前的样子,以及之后应该如何改变? @KarlKnechtel data['Exisitng_Date'] 列有缺失值 如果 df(等待时间 - 相等行有整数)大于 0,我想用 New_time 列填充,否则实际日期 coumn 类型为日期时间64 ***.com/questions/27041724/… 有帮助吗? 【参考方案1】:

第一个代码没有输入else:的原因是因为你正在测试整个dataframe,它会返回True存在。您实际上并没有查询满足条件的值。

您获得ValueError 的原因是因为您同时测试多个值(整个值数组),在这种情况下您可能会获得多个True 和多个False

我不建议像您那样循环访问dataframe。您可以使用loc 和一些逻辑。这实际上取决于您正在寻找的确切输出,但pandas 可能已经有工具供您使用,而无需遍历dataframe

data.loc[data['Waiting Time'] > 0,'Existing_Date'].fillna(data['New_time'],inplace=True)
data.loc[data['Waiting Time'] <= 0,'Existing_Date'].fillna(data['Actual Date'],inplace=True)

【讨论】:

我试过了,它在运行后显示缺失字段中的“NaT”值 您的数据是 datetime 还是 str ?根据文档:对于 datetime64[ns] 类型,NaT 表示缺失值。这是一个伪原生标记值,可以由 NumPy 以单一 dtype (datetime64[ns]) 表示。 pandas 对象提供 NaT 和 NaN 之间的兼容性。

以上是关于If-else ValueError Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:无法强制转换为 Series,长度必须为 1:给定 n

ValueError: Series 的真值不明确(API NaN 处理)

将 Pandas 列传递给函数时出现“ValueError:Series 的真值不明确”

ValueError:在将 lambda 与 loc 一起使用时,Series 的真值不明确 [重复]

为啥我会收到 ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 & [复制]