python无==无是真还是假?

时间:2017-08-31 11:27:06

标签: python pandas null

条件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为True:

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为假。

1 个答案:

答案 0 :(得分:4)

Pandas使用floating point Not a Number valueNaN来表示一系列数字中缺少某些内容。那是因为在数据的内部表示中更容易处理。您的系列中没有任何None个对象。即便如此,如果您使用dtype=object数据,None也会用于编码缺失值。请参阅Working with missing data

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

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

当合并或广播时,Pandas知道“缺失”意味着什么,对NaN或系列中的None值没有进行相等测试。明确跳过空值。

如果您想测试某个值是否为空,请改用series.isnull()series.notnull()方法。