编程语言
首页 > 编程语言> > 为什么python pandas不使用3值逻辑?

为什么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