条件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()
方法。