为什么python pandas不使用3值逻辑?

时间:2017-05-11 21:25:02

标签: python pandas numpy logical-operators

我想知道为什么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.nanTrue值之间的比较发生了一些非常奇怪的事情。那么这里发生了什么?

EDIT。 感谢您的评论,现在我看到np.nan被认为是“真正的”价值。那么任何人都可以解释这是什么意思,这种方法背后的理由是什么?

2 个答案:

答案 0 :(得分:1)

这是numpy行为,至少部分是从python继承:

In [11]: bool(float('nan'))
Out[11]: True

In [12]: bool(np.NaN)
Out[12]: True

(NaN是" truthy"。)

答案 1 :(得分:0)

您错误地判断了orand陈述。

or会检查bool(value)形式的第一个值是否为True,如果它是False则需要第二个值。

另一方面,

andTruebool(value1)的形式检查其中两个值是bool(value2) 同时