我想知道为什么python pandas / numpy没有实现具有true,false和NA的3值逻辑(所谓的Łukasiewicz的逻辑)(例如R确实如此)。我已经读过(https://www.oreilly.com/learning/handling-missing-data)这在某种程度上是由于pandas使用了比R更多的基本数据类型的事实。但是,对于我来说,这并不完全清楚为什么在这种情况下,使用缺失值进行逻辑运算的奇怪行为是不可避免的。
实施例
import numpy as np
np.nan and False # so far so good, we have False
np.nan or False # again, good, we have nan
False and np.nan # False, good
False or np.nan # give nan, so again, it is correct
np.nan and True # weird, this gives True, while it should give nan
True and np.nan # nan, so it is correct, but switching order should not affect the result
np.nan or True # gives nan, which is not correct, should be True
True or np.nan # True so it is correct, again switching the arguments changes the result
因此,该示例显示,np.nan
和True
值之间的比较发生了一些非常奇怪的事情。那么这里发生了什么?
EDIT。
感谢您的评论,现在我看到np.nan
被认为是“真正的”价值。那么任何人都可以解释这是什么意思,这种方法背后的理由是什么?
答案 0 :(得分:1)
这是numpy行为,至少部分是从python继承:
In [11]: bool(float('nan'))
Out[11]: True
In [12]: bool(np.NaN)
Out[12]: True
(NaN是" truthy"。)
答案 1 :(得分:0)
您错误地判断了or
和and
陈述。
or
会检查bool(value)
形式的第一个值是否为True,如果它是False
则需要第二个值。
and
以True
和bool(value1)
的形式检查其中两个值是bool(value2)
同时