NaN被用作占位符,丢失的数据一致的大熊猫,一致性好等特点。我通常将NaN读/翻译为“ missing”。另请参阅文档中的“处理丢失的数据”部分。
Wes在文档“ NA表示的选择”中写道:
考虑到NumPy和Python的总体情况,经过多年的生产使用[NaN]已经证明是最好的决定。特殊值NaN(非-A-数)被用作到处作为NA值,并有API函数isnull
和notnull
可跨越dtypes被用于检测NA的值。
...
因此,我选择了Pythonic的“实用性胜过纯度”方法,并且将整数NA功能换成了更简单的方法,即在float和object数组中使用特殊值来表示NA,并在必须使用NA时将整数数组提升为float介绍。
注意:包含缺失数据的整数系列被转换为浮点数的“陷阱”。
在我看来,使用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.dtype
Out[13]: dtype('O')
In [14]: s_good.dtype
Out[14]: dtype('float64')
杰夫对此评论(如下):
np.nan
允许向量化操作;它是一个float值,而None
根据定义,它强制对象类型,这基本上禁用了numpy中的所有效率。
因此,快速重复3次:object ==坏,float == good
说,许多操作在None vs NaN上仍然可以正常工作(但可能不受支持,即有时可能会产生令人惊讶的结果):
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
要回答第二个问题:
您应该使用pd.isnull
并pd.notnull
测试丢失的数据(NaN)。
qwerty
不是数字。