条件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
为假。
答案 0 :(得分:4)
Pandas使用floating point Not a Number value,NaN
来表示一系列数字中缺少某些内容。那是因为在数据的内部表示中更容易处理。您的系列中没有任何None
个对象。即便如此,如果您使用dtype=object
数据,None
也会用于编码缺失值。请参阅Working with missing data。
这并不重要,但根据定义,NaN总是不等于NaN:
>>> float('NaN') == float('NaN')
False
当合并或广播时,Pandas知道“缺失”意味着什么,对NaN或系列中的None
值没有进行相等测试。明确跳过空值。
如果您想测试某个值是否为空,请改用series.isnull()
和series.notnull()
方法。