python none ==无是真的还是错误



条件None == None是对还是错误?

我有2个pandas-dataframes:

import pandas as pd
df1 = pd.DataFrame({'id':[1,2,3,4,5], 'value':[None,20,None,40,50]})
df2 = pd.DataFrame({'index':[1,2,3], 'value':[None,20,None]})
In [42]: df1
Out[42]:    id  value
         0   1    NaN
         1   2   20.0
         2   3    NaN
         3   4   40.0
         4   5   50.0
In [43]: df2
Out[43]:    index  value
         0      1    NaN
         1      2   20.0
         2      3    NaN

当我执行合并操作时,看起来None == None是正确的:

In [37]: df3 = df1.merge(df2, on='value', how='inner')
In [38]: df3
Out[38]:    id  value  index
         0   1    NaN      1
         1   1    NaN      3
         2   3    NaN      1
         3   3    NaN      3
         4   2   20.0      2

但是当我这样做时:

In [39]: df4 = df3[df3['value']==df3['value']]
In [40]: df4
Out[40]:    id  value  index
         4   2   20.0      2         
In [41]: df3['value']==df3['value']
Out[41]: 0    False
         1    False
         2    False
         3    False
         4     True 

它表明 None == None是错误的。

pandas使用浮点而不是数字NaN,以指示一系列数字中缺少某些东西。这是因为在数据的内部表示中更容易处理。您的系列中没有任何None对象。即使这样,如果您使用dtype=object数据,None也用于编码缺失值。请参阅使用丢失的数据

在这里并不重要,但根据定义,Nan总是不等于Nan:

>>> float('NaN') == float('NaN')
False

合并或广播时,熊猫知道"缺失"的含义,一系列的NAN或None值没有进行平等测试。零是明确跳过的。

如果要测试值是否为null,请改用series.isnull()series.notnull()方法。

相关内容

最新更新