在我看来,使用NaN(而不是None)的主要原因是它可以与numpy的
float64 dtype一起存储,而不是效率较低的
object dtype,请参阅
NA type Promotions。
# without forcing dtype it changes None to NaN!s_bad = pd.Series([1, None], dtype=object)s_good = pd.Series([1, np.nan])In [13]: s_bad.dtypeOut[13]: dtype('O')In [14]: s_good.dtypeOut[14]: dtype('float64')杰夫对此评论(如下):
np.nan允许向量化操作;它是一个float值,而None根据定义,它强制对象类型,这基本上禁用了numpy中的所有效率。
因此,快速重复3次:
object ==bad,
float == good
说,许多操作在None vs NaN上仍然可以正常工作(但可能不受支持,即有时可能会产生令人惊讶的结果):
In [15]: s_bad.sum()Out[15]: 1In [16]: s_good.sum()Out[16]: 1.0
要回答第二个问题:
你应该使用pd.isnull并pd.notnull测试丢失的数据(NaN)。



