发布于2019-08-21 16:34 阅读(1213) 评论(0) 点赞(23) 收藏(4)
问题是使用or
条件过滤我的结果数据帧。我希望我的结果df
提取var
高于0.25且低于-0.25的所有列值。
下面的这个逻辑给了我一个模糊的真值,但是当我在两个单独的操作中分割这个过滤时它可以工作。这里发生了什么?不知道在哪里使用建议a.empty(), a.bool(), a.item(),a.any() or a.all()
。
result = result[(result['var']>0.25) or (result['var']<-0.25)]
在or
和and
蟒蛇语句需要truth
-值。因为pandas
这些被认为是不明确的,所以你应该使用“按位” |
(或)或&
(和)操作:
result = result[(result['var']>0.25) | (result['var']<-0.25)]
对于这些类型的数据结构,这些都是重载的,以产生元素or
(或and
)。
只是为此声明添加更多解释:
当你想得到bool
一个pandas.Series
:时抛出异常:
>>> import pandas as pd
>>> x = pd.Series([1])
>>> bool(x)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
你击中的是一个操作符隐式将操作数转换为bool
(你使用or
但它也适用于and
,if
和while
)的地方:
>>> x or x
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> x and x
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> if x:
... print('fun')
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> while x:
... print('fun')
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
除了这些4个报表有几个Python函数的隐藏一些bool
调用(如any
,all
,filter
,...),这些都是通常没有问题与pandas.Series
而是完整性我想提一提这些。
在您的情况下,异常并不真正有用,因为它没有提到正确的替代方案。对于and
和or
你可以使用(如果你想要元素比较):
>>> import numpy as np
>>> np.logical_or(x, y)
或者只是|
操作员:
>>> x | y
>>> np.logical_and(x, y)
或者只是&
操作员:
>>> x & y
如果您正在使用运算符,请确保由于运算符优先级而正确设置括号。
有几个逻辑numpy的功能,它应该工作的pandas.Series
。
如果你在做if
或时遇到它,那么Exception中提到的替代方案更适合while
。我将简要解释其中的每一个:
如果要检查系列是否为空:
>>> x = pd.Series([])
>>> x.empty
True
>>> x = pd.Series([1])
>>> x.empty
False
如果没有明确的布尔解释,Python通常会将len
容器的gth(例如list
,tuple
...)解释为真值。因此,如果你想要类似python的检查,你可以这样做:if x.size
或者if not x.empty
代替if x
。
如果您Series
包含一个且只包含一个布尔值:
>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
如果你想检查你的系列中的第一个也是唯一的一个项目(比如.bool()
但是对于不是布尔内容也是如此):
>>> x = pd.Series([100])
>>> x.item()
100
如果你想检查所有或任何项目是否为零,不是空或不是假:
>>> x = pd.Series([0, 1, 2])
>>> x.all() # because one element is zero
False
>>> x.any() # because one (or more) elements are non-zero
True
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/50713/e92dfd83b8db6e6ceae8/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!