NaN 和 None 有什么区别?

2025-01-07 08:45:00
admin
原创
149
摘要:问题描述:我正在使用 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2379  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1510  
  PLM(产品生命周期管理)系统在企业项目管理中扮演着至关重要的角色,它能够整合产品从概念设计到退役的全流程信息,提升协同效率,降低成本。然而,项目范围蔓延是项目管理过程中常见且棘手的问题,在PLM系统环境下也不例外。范围蔓延可能导致项目进度延迟、成本超支、质量下降等一系列不良后果,严重影响项目的成功交付。因此,如何在P...
plm项目经理是做什么   16  
  PLM(产品生命周期管理)系统在现代企业的产品研发与管理过程中扮演着至关重要的角色。它不仅仅是一个管理产品数据的工具,更能在利益相关者分析以及沟通矩阵设计方面提供强大的支持。通过合理运用PLM系统,企业能够更好地识别、理解和管理与产品相关的各类利益相关者,构建高效的沟通机制,从而提升产品开发的效率与质量,增强企业的市场...
plm是什么   20  
  PLM(产品生命周期管理)项目管理对于企业产品的全生命周期规划、执行与监控至关重要。在项目推进过程中,监控进度偏差是确保项目按时、按质量完成的关键环节。五维健康检查指标体系为有效监控PLM项目进度偏差提供了全面且系统的方法,涵盖了项目的多个关键维度,有助于及时发现问题并采取针对性措施。需求维度:精准把握项目基石需求维度...
plm项目管理软件   18  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用