NaN 和 None 有什么区别?

2024-02-14

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

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

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

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

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


NaN 用作占位符缺失数据始终如一地在熊猫中 https://pandas.pydata.org/pandas-docs/dev/user_guide/gotchas.html#choice-of-na-representation,一致性好。我通常将 NaN 读/翻译为“丢失的”. 另请参阅“处理丢失的数据” https://pandas.pydata.org/docs/user_guide/missing_data.html文档中的部分。

韦斯在文档中写道“NA 代表的选择” https://pandas.pydata.org/pandas-docs/dev/user_guide/gotchas.html#choice-of-na-representation:

经过多年的生产使用,至少在我看来,[NaN] 已被证明是考虑到 NumPy 和 Python 的总体状况的最佳决定。使用特殊值 NaN(非数字)到处作为NA值,并且有API函数isna https://pandas.pydata.org/pandas-docs/dev/reference/api/pandas.DataFrame.isna.html#pandas.DataFrame.isna and notna https://pandas.pydata.org/pandas-docs/dev/reference/api/pandas.DataFrame.notna.html#pandas.DataFrame.notna它可以跨数据类型使用来检测 NA 值。
...
因此,我选择了 Python 式的“实用胜于纯粹”方法,并将整数 NA 功能换成了一种更简单的方法,即使用浮点和对象数组中的特殊值来表示 NA,并在必须引入 NA 时将整数数组提升为浮点。

注:“发现”包含缺失数据的整数系列被向上转换为浮点数 https://pandas.pydata.org/pandas-docs/dev/user_guide/gotchas.html#support-for-integer-na.

在我看来,使用 NaN (而不是 None)的主要原因是它可以使用 numpy 的 float64 数据类型存储,而不是效率较低的对象数据类型,see NA型促销 https://pandas.pydata.org/pandas-docs/dev/user_guide/gotchas.html#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允许矢量化操作;它是一个浮点值,而None,根据定义,强制对象类型,这基本上禁用了 numpy 中的所有效率。

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

话虽如此,许多操作仍然可以与 None 和 NaN 一起使用(但可能不受支持,即它们有时可能会给出令人惊讶的结果 https://stackoverflow.com/a/19866269/1240268):

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

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

回答第二个问题:
你应该使用isna https://pandas.pydata.org/pandas-docs/dev/reference/api/pandas.DataFrame.isna.html#pandas.DataFrame.isna and notna https://pandas.pydata.org/pandas-docs/dev/reference/api/pandas.DataFrame.notna.html#pandas.DataFrame.notna测试缺失数据 (NaN)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NaN 和 None 有什么区别? 的相关文章

随机推荐

  • 如何显示“stack haddock”的进度?

    Ran stack haddock haskell src exts I get haskell src exts 1 20 3 configure haskell src exts 1 20 3 build haskell src ext
  • 如何确保一次只运行一份 Perl 脚本副本?

    我需要确保一次只运行一份 Perl 脚本副本 根据建议here http www perlmonks org node id 590619我写了一个子程序来进行检查 sub check instances open my fh lt 0 o
  • 如何在 HTML5 中流式传输实时视频?

    我正在寻找一种方法来广播从植根于 PC 的网络摄像头或相机拍摄的实时视频 广播应该使用标签 我认为支持 rtp 和 rtsp 显示在 HTML5 页面中 查看流的用户不必安装任何插件或视频播放器 例如 QuickTime 我需要视频为 mp
  • Javascript 循环/递增 html 代码,值最大为 55

    我需要在静态 html 页面中自动创建链接列表 有没有办法使用 JavaScript 来执行此操作 我厌倦了一些脚本 但无法解决 这是我的html a href 1 html img src images 1 jpg width 119 h
  • 导入 typescript npm 包中的子文件夹

    我正在创建一个包npm但我希望通过以下方式导入它 import myPackage from my package import subFunction1 subFunction2 from my package subfunctions
  • googleMap标记旋转位置变化

    我使用叠加层作为标记 这是我创建的以下代码
  • 使用 CSS 将 div 相对于不是其父级的另一个 div 定位

    我知道position relative and position absolute相对于其父级来定位 div 的技巧 但是如果 div 不是它的父级并且我想相对于它定位它怎么办 我正在尝试按照这些思路实施一些事情 我也知道position
  • 集合已修改;枚举操作可能无法执行。锁到处都在用怎么可能?

    这是一个只有我在编写和使用的小程序 现在我将编写使用导致此问题的哈希集的所有区域的代码 我不明白这怎么可能 该项目仅在主窗口中使用 hsProxyList 是一个哈希集 HashSet
  • 在 C# 中列出目录中的大量文件

    我正在尝试获取特定目录中的文件列表 其中包含超过 2000 万个文件 每个文件大小从 2 KB 到 20 KB 不等 问题是我的程序每次都会抛出内存不足异常 而像 robocopy 这样的工具可以很好地将文件夹复制到另一个目录 没有任何问题
  • 如何在 Yii2 查询中使用不等于

    我想用一个yii2我想在其中检查不等于条件的查询 我这样尝试过 但没有给出想要的结果 我该怎么做 details MovieShows find gt where movie id gt id gt andWhere location id
  • 有没有可以预览 Markdown 文件的 Vim 插件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我喜欢标记和 Mou 编辑器 它具有即时预览渲染结果的强大功能 所以我想知道 有没有办法在 Vim 中做
  • 科尔多瓦可以捏合放大吗

    这方面的信息并不多 而且我能找到的信息也非常模糊且无益 我的意思是希望我的 cordova phonegap 应用程序中的一个页面具有可以捏合以放大和平移的图像 这可能吗 如果可以 我该怎么做 在本机代码中 紧接此行之后 super loa
  • $_SERVER['REMOTE_USER'] 可以被欺骗吗?

    我遇到一种情况 我正在打开基于 SERVER REMOTE USER 变量的文件 我不认为这是可以欺骗的 但只是想确认一下 我不想让自己容易受到任意文件读取的影响 是的 该用户名是远程用户指定的用户名 您还需要验证密码 如果密码是由您的服务
  • 从两组日期范围中查找差距日期范围 C#

    我有基准日期范围和测试日期范围 我需要获取基础和测试之间的差距 这意味着缺少基础中但不在测试中的日期范围 最好的方法是什么 Base Date Ranges 1 1 2012 1 10 2012 1 11 2012 1 25 2012 Te
  • 什么时候必须在 Javascript 中使用 new 关键字?

    有时我应该打电话new Foo 创建一个新的 foo 对象 但有时我可以调用Foo 创建它 一般来说 对于给定的函数 我如何知道使用哪个 什么是new关键字做什么 See 这个问题 https stackoverflow com quest
  • 如何取消对 jar 的签名?

    有没有办法取消 java jar 文件的签名 我尝试在开发环境中使用一些已签名的 jar 但遇到安全异常 因此我想取消对这些 jar 的签名 以便稍后在准备部署时对其进行签名 我不知道答案 但我会这样做 解压相关的 jar 文件 jar 只
  • 如何创建腾讯微博(qq)分享按钮?

    我需要实现相当于网站中文翻译的 Tweet 按钮 即not我已经得到的 在微博上分享 按钮 使用生成器here http open weibo com sharebutton 而是一个腾讯 QQ微博分享按钮 到目前为止我所做的 订阅微博 阅
  • 将 sed 的输出存储到变量中[重复]

    这个问题在这里已经有答案了 我想将文件的第二行存储到一个变量中 所以我这样做 sed n 2p myfile 我希望存储的输出sed命令写入名为的变量line 执行此操作的正确语法是什么 Use 命令替换 http tldp org LDP
  • CAD 爆炸图算法

    我正在制作一个程序来查看 3D CAD 模型 并希望构建自动分解视图 将看到的所有组件都是轴对称的 有些可能不是 但大多数是 我想找出一种算法 用于自动将组件中的零件移动到分解视图位置 这是我想通过算法实现的示例 当然不包括标签 我必须使用
  • NaN 和 None 有什么区别?

    我正在使用 pandas 读取 csv 文件的两列readcsv 然后将值分配给字典 这些列包含数字和字母的字符串 有时会出现单元格为空的情况 在我看来 读取该字典条目的值应该是None但反而nan被安排了 一定None更能描述空单元格 因