Python 无逻辑索引混乱

Python 无逻辑索引混乱,python,numpy,pandas,Python,Numpy,Pandas,我是熊猫的新用户。 我不明白为什么代码是这样工作的。 当元素实际等于零时,为什么返回True In [14]: import pandas as pd tweets = pd.DataFrame([None, None], columns=['country']) print tweets['country'] != None Out[14]: 0 True 1 True Name: country, dtype: bool 谢谢。我不确定表达式返回true的原因,但您可以使用内

我是熊猫的新用户。 我不明白为什么代码是这样工作的。 当元素实际等于零时,为什么返回True

In [14]:
import pandas as pd
tweets = pd.DataFrame([None, None], columns=['country'])
print tweets['country'] != None

Out[14]:
0    True
1    True
Name: country, dtype: bool

谢谢。

我不确定表达式返回true的原因,但您可以使用内置的null checker来确定值是否为null:

print tweets.notnull()

country
0   False
1   False
对应的是

print tweets.isnull()

country
0   True
1   True

我不确定表达式返回true的原因,但您可以使用内置的null checker来确定值是否为null:

print tweets.notnull()

country
0   False
1   False
对应的是

print tweets.isnull()

country
0   True
1   True

简而言之,这是因为熊猫认为
None
在很大程度上等同于
NaN
,而
np.NaN==np.NaN
False
。正如@economy和其他人所说的,使用
isnull()
notnull()
方法来做你想做的事情

现在,我们来解释一下为什么这不是一个bug。相等运算符由
pandas.lib
中的Cython代码定义。具体来说,当您编写
tweets['country']==None
时,将调用
pandas.lib.scalar\u compare
。注意
scalar\u compare
的工作原理:

>>> pd.lib.scalar_compare(np.array([None]), None, operator.ne)
array([ True], dtype=bool)

这就是你看到的行为。现在,这不太可能是一个bug,因为如果我们看一下,它会指向一个显式处理
None
。如果我们看一下这个代码,我们会发现它本质上(非常有意地)说
None==None
False

简而言之,这是因为熊猫认为
None
在很大程度上等同于
NaN
,而
np.NaN==np.NaN
False
。正如@economy和其他人所说的,使用
isnull()
notnull()
方法来做你想做的事情

现在,我们来解释一下为什么这不是一个bug。相等运算符由
pandas.lib
中的Cython代码定义。具体来说,当您编写
tweets['country']==None
时,将调用
pandas.lib.scalar\u compare
。注意
scalar\u compare
的工作原理:

>>> pd.lib.scalar_compare(np.array([None]), None, operator.ne)
array([ True], dtype=bool)

这就是你看到的行为。现在,这不太可能是一个bug,因为如果我们看一下,它会指向一个显式处理
None
。如果我们看那段代码,我们会发现它本质上(非常有意地)说,
None==None
False

对我来说看起来像个bug。你应该做
tweets['country'].notnull()
我认为这个比较不会像这样对我来说像个bug。你应该做
tweets['country'].notnull()
我认为这种比较不会像这样起作用