如何解决Python 将数字与 Pandas 数据框中的值进行比较
我想计算数据帧中零的数量,但使用 for 循环和 if 语句会出现以下错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty,a.bool(),a.item(),a.any() or a.all().
My code to count the number of zeros in a Pandas dataframe giving error
解决方法
您收到该错误的原因是因为 df.iloc[i]
返回一个系列对象,而 df.iloc[i]==0
返回另一个布尔系列,例如 [True,False,True,True]
。这就是为什么不是为 if 条件获得单个 True 或 False 值,而是最终获得一系列布尔值(如果只有 1 列,也可能是单个长度系列!)反过来抛出那个错误。
根据您提供的代码,您似乎可以简单地执行以下操作。但是请发布您的数据集以帮助其他人了解您正在尝试做什么。
k = (data2==0).sum().sum() #sum row-wise,then sum column-wise
这将创建一个带有布尔值的数据框,其中所有值为 0 的地方,第一个总和返回每行 True 值的数量(因为 True 等于 1 且 False 等于 0)。然后第二个和将其减少到数据帧中所有行中 1 的总数。
您可以通过其他方式执行此操作 -
(data2==0).values.sum()
#OR
(data2==0).to_numpy().sum()
如果您仍然想使用循环(可能是因为您想执行更复杂的任务),则必须迭代行,然后迭代数据帧的行系列(列)中的每个值 -
k=0
for i in range(data2.shape[0]):
for j in range(data2.shape[1]):
if data2.iloc[i,j]==0:
k+=1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。