NaN 和 None 有什么区别?

2025-01-07 08:45:00
admin
原创
123
摘要:问题描述:我正在使用 pandas 读取 csv 文件的两列readcsv(),然后将这些值分配给一个字典。这些列包含数字和字母的字符串。偶尔会出现单元格为空的情况。在我看来,读取到该字典条目的值应该是,None但却nan被分配了。当然,None这更能描述一个空单元格,因为它有一个空值,而nan只是说读取的值...

问题描述:

我正在使用 pandas 读取 csv 文件的两列readcsv(),然后将这些值分配给一个字典。这些列包含数字和字母的字符串。偶尔会出现单元格为空的情况。在我看来,读取到该字典条目的值应该是,None但却nan被分配了。当然,None这更能描述一个空单元格,因为它有一个空值,而nan只是说读取的值不是数字。

None我的理解是否正确,和之间有什么区别nan?为什么nan分配的是而不是None

此外,我的字典检查是否有任何空单元格一直使用numpy.isnan()

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

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


解决方案 1:

NaN在 pandas 中始终用作缺失数据的占位符,一致性很好。我通常将 NaN 读作/翻译为“缺失”另请参阅文档中的“处理缺失数据”部分。

Wes 在文档‘NA 表示的选择’中写道:

经过多年的生产使用,[NaN] 已被证明是 NumPy 和 Python 总体状况下的最佳决策,至少在我看来是这样。特殊值 NaN(非数字)在任何地方都用作NA 值,并且有 API 函数isnanotna可用于跨 dtype 检测 NA 值。...

因此

,我选择了 Pythonic“实用性胜过纯粹性”方法,并将整数 NA 功能换成一种更简单的方法,即在浮点和对象数组中使用特殊值来表示 NA,并在必须引入 NA 时将整数数组提升为浮点数。

注意:包含缺失数据的整数系列被向上转换为浮点数。

在我看来,使用 NaN(而不是 None)的主要原因是它可以与 numpy 的 float64 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==坏,float==好

话虽如此,许多操作可能仍然可以与 None 和 NaN 一样有效(但可能不受支持,即它们有时可能会产生令人惊讶的结果):

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

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

回答第二个问题:

您应该使用isnanotna来测试缺失数据(NaN)。

解决方案 2:

NaN可以在数学运算中用作数值,而None不能(或至少不应该)。

NaN是一个数值,如IEEE 754 浮点标准中所定义。
None是 Python 的内部类型 ( NoneType),并且在这种情况下更像是“不存在”或“空”,而不是“数值无效”。

其主要的“症状”是,如果你对包含 NaN 的数组执行平均值或总和,即使只有一个 NaN,结果也会是 NaN……

另一方面,您不能使用它None作为操作数执行数学运算。

因此,根据具体情况,您可以使用None来告诉算法不要在计算中考虑无效或不存在的值。这意味着算法应该测试每个值以查看它是否None

Numpy 有一些函数可以避免 NaN 值污染你的结果,例如nansumnan_to_num

解决方案 3:

该函数isnan()检查某个东西是否“不是数字”,并返回变量是否为数字,例如isnan(2)返回 false。

条件myVar is not None返回变量是否被定义

您的 numpy 数组使用,isnan()因为它旨在成为一个数字数组,并且它将数组的所有元素初始化为NaN这些元素被视为“空”

解决方案 4:

以下是差异:

  • nan属于阶级float

  • None属于阶级NoneType

我发现以下文章非常有用:
https: //medium.com/analytics-vidhya/dealing-with-missing-values-nan-and-none-in-python-6fc9b8fb4f31

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用