为什么python pandas不使用3值逻辑?
作者:互联网
参见英文答案 > Why do “Not a Number” values equal True when cast as boolean in Python/Numpy? 4个
我想知道为什么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值之间的比较中发生了一些非常奇怪的事情.那么这里发生了什么?
编辑.
感谢您的评论,现在我看到np.nan被认为是“真正的”价值.那么任何人都可以解释这是什么意思,这种方法背后的理由是什么?
解决方法:
这是numpy行为,至少部分是从python继承的:
In [11]: bool(float('nan'))
Out[11]: True
In [12]: bool(np.NaN)
Out[12]: True
(NaN是“真实的”.)
标签:python,pandas,numpy,logical-operators 来源: https://codeday.me/bug/20191003/1849260.html