numpy NaN和None之间有何区别?

sqougxex  于 2023-08-05  发布在  其他
关注(0)|答案(4)|浏览(122)

我使用pandas readcsv()阅读csv文件的两列,然后将值分配给字典。列包含数字和字母的字符串。有时候会出现单元格为空的情况。在我看来,读取到该字典条目的值应该是None,但却分配了nan。当然,None更能描述一个空单元格,因为它有一个null值,而nan只是说读取的值不是一个数字。
请问Nonenan有什么区别?为什么分配的是nan而不是None
此外,我的字典检查任何空单元格一直使用numpy.isnan()

for k, v in my_dict.iteritems():
    if np.isnan(v):

字符串
但是这给了我一个错误,说我不能对v使用这个检查。我猜这是因为一个整数或浮点变量,而不是一个字符串是要使用的。如果这是真的,我如何检查v的“空单元格”/nan情况?

dba5bblo

dba5bblo1#

NaN在pandas中被用作丢失数据的占位符 * 一致性 ,一致性很好。我通常读/翻译NaN为*“失踪”**。* 另请参阅文档中的'working with missing data'部分。*
Wes在文档“NA代表的选择”中写道:
经过多年的生产使用,至少在我看来,考虑到NumPy和Python的总体状况,[NaN]已经被证明是最好的决定。特殊值NaN(Not-A-Number)被用作NA值,并且有API函数isnanotna可以跨数据类型使用来检测NA值。
...
因此,我选择了Pythonic的“实用性胜过纯粹性”方法,并将整数NA功能换成了一种更简单的方法,即在浮点数和对象数组中使用特殊值来表示NA,并在必须引入NA时将整数数组提升为浮点数。

  • 注意:“gotcha”,包含缺失数据的整数Series被向上转换为浮点数。

在我看来,使用NaN(而不是None)的主要原因是它可以用numpy的float 64 dtype存储,而不是效率较低的对象dtype,* 参见NA类型提升 *。

#  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')

字符串
Jeff对此评论如下:
np.nan允许向量化操作;它是一个浮点值,而None,根据定义,强制对象类型,这基本上禁用了numpy中的所有效率。

快速重复3次:object==bad,float==good

也就是说,许多操作可能仍然可以与None和NaN一样工作(但可能不支持,即他们有时会给予surprising results):

In [15]: s_bad.sum()
Out[15]: 1

In [16]: s_good.sum()
Out[16]: 1.0


回答第二个问题:
您应该使用isnanotna来测试缺失数据(NaN)。

k4aesqcs

k4aesqcs2#

NaN可以在数学运算中用作数值,而None不能(或者至少不应该)。
NaN是一个数值,如IEEE 754 floating-point standard中所定义。None是一个内部Python类型(NoneType),在这种情况下更像是“不存在”或“空”,而不是“数字无效”。
主要的“症状”是,如果你对一个包含NaN的数组执行平均或求和,即使是一个数组,结果也会得到NaN...
另一方面,不能使用None作为操作数执行数学运算。
因此,根据具体情况,您可以使用None作为一种方式来告诉您的算法在计算时不要考虑无效或不存在的值。这意味着算法应该测试每个值,看看它是否是None
Numpy有一些函数可以避免NaN值污染结果,例如nansumnan_to_num

piztneat

piztneat3#

函数isnan()检查某个变量是否为“Not A Number”,并返回变量是否为数字,例如isnan(2)返回false
条件myVar is not None返回变量是否已定义
numpy数组使用isnan(),因为它是一个数字数组,它将数组的所有元素初始化为NaN,这些元素被认为是“空”

6uxekuva

6uxekuva4#

以下是差异:

  • nan属于float
  • None属于NoneType

我发现下面的文章很有帮助:https://medium.com/analytics-vidhya/dealing-with-missing-values-nan-and-none-in-python-6fc9b8fb4f31

相关问题