pandas Series.tolist() 中的 NaN 与 list 中的 NaN 的行为不同

2024-05-04

Why does

>> import pandas as pd
>> import numpy as np

>> list(pd.Series([np.nan, np.nan, 2, np.nan, 2])) == [np.nan, np.nan, 2, np.nan, 2]

return False?我得到相同的结果pd.Series([np.nan, np.nan, 2, np.nan, 2]).tolist()。我试图通过以下函数来计算 pandas groupby 对象(基本上是 pandas Series)中最常见的元素

def get_most_common(srs):
    """
    Returns the most common value in a list. For ties, it returns whatever
    value collections.Counter.most_common(1) gives.
    """
    from collections import Counter

    x = list(srs)
    my_counter = Counter(x)
    most_common_value = my_counter.most_common(1)[0][0]

    return most_common_value

刚刚意识到即使我有一个步骤,我也会得到多个 NaN 的错误计数x = list(srs).

编辑: 只是为了澄清为什么这对我来说是一个问题:

>>> from collections import Counter
>>> Counter(pd.Series([np.nan, np.nan, np.nan, 2, 2, 1, 5]).tolist())
Counter({nan: 1, nan: 1, nan: 1, 2.0: 2, 1.0: 1, 5.0: 1}) # each nan is counted differently
>>> Counter([np.nan, np.nan, np.nan, 2, 2, 1, 5])
Counter({nan: 3, 2: 2, 1: 1, 5: 1}) # nan count of 3 is correct

正如@emilaz 已经指出的那样,根本问题是nan != nan在所有情况下。然而,对象引用才是您观察中最重要的。

观察以下对象引用list and pd.Series:

>>> s = pd.Series([np.nan, np.nan, np.nan, 2, 2, 1, 5])
>>> s.apply(id)
0    149706480
1    202463472
2    202462336
3    149706912
4    149706288
5    149708784
6    149707200
dtype: int64

>>> l = [np.nan, np.nan, np.nan, 2, 2, 1, 5]
>>> list(map(id, l))
[68634768, 68634768, 68634768, 1389126848, 1389126848, 1389126832, 1389126896]

The np.nan对象与导入的对象共享相同的引用np.nan对象在list,而为每个创建一个新的引用Series(这对于pandas usage).

因此答案不是比较nan以这样的方式。pandas有自己的应对方式nan,因此根据您的实际活动,可能有一个更简单的答案(例如df.groupby('some col').count())比你想象的要多。

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

pandas Series.tolist() 中的 NaN 与 list 中的 NaN 的行为不同 的相关文章

随机推荐

  • 从 XML 资源创建 hashmap/map

    我正在制作一个应用程序 其中 Web 服务从 Web 服务 即 BEL FRA SWE 获取 除其他外 一堆代码 在运行时 我想将这些代码翻译成适当的名称以显示给用户 即比利时 法国 瑞典 可能有很多这样的代码 所以我想知道是否有任何适当的
  • 有没有办法设置独立 TableView 列的样式?

    我可以使用 CSS 来设置单元格样式 但如果我只想为一列使用不同的样式 例如使用不同的文本颜色 怎么办 也许我错过了一些东西 你应该使用TableColumn setCellFactory http docs oracle com java
  • 如何以编程方式更新 SharePoint Web 部件中的内容?

    有人知道如何以编程方式更新任何标准 SharePoint v3 Web 部件的内容吗 例如 将链接摘要 Web 部件放置在页面上 添加一些链接 现在 我如何使用 WSS API 更新此信息 我还没有找到任何直接的方法来执行此操作 到目前为止
  • 后续交易不会更新 Hyperledger Fabric 中的账本,产生图标一致状态

    我正在做一个小项目来让自己熟悉超级账本结构 https hyperledger fabric readthedocs io en release 1 1 目前 我有一个小型网络 由单个对等点 排序者和 ca 节点 加上 cli chainc
  • 将数据导入 MySQL Workbench

    我有一个包含 6 个表的数据库 我想将这些表导入到existingMySQL Workbench 中的数据库 我使用 phpMyAdmin 将数据库导出到 sql文件 并使用 数据导入 恢复 按钮将其导入到 MySQL Workbench
  • EF 型号。导航属性只能参与单个关系

    我有这样的实体 它们紧密相连 public class Game public int Id get set public int FirstTeamId get set public Team FirstTeam get set publ
  • 增加 .fig 文件中的散点标记大小

    我有一个图形文件 scatter fig 该图有许多使用 scatter 的散点绘图仪 现在我只有这个无花果文件 我需要增加所有散点的标记大小 手动尝试过 但非常困难 有没有办法我可以做类似的事情 H 图形句柄 s 点 h 设置 s 标记大
  • 为什么 -INT_MIN = INT_MIN 在有符号的二进制补码表示中?

    我仍然没有找到为什么最低的有符号负数没有等效的有符号正数的原因 为简单起见 我的意思是 3 位二进制数 100 是 4 但我们不能有符号格式的正 4 因为我们不能 它溢出了 那么我们如何知道补码 1000 是 4 1000 0000 是 1
  • eval 列表理解失败[重复]

    这个问题在这里已经有答案了 考虑以下假设代码 class B object def init self self b 2 def foo self out1 eval self b ok print out1 prints 2 out2 e
  • 使用 MySQL Workbench 创建新数据库

    作为 MySQL 新手 我安装了最新版本的 MySQL Workbench 5 2 33 我想知道如何使用此应用程序创建数据库 在 SQL 编辑器的 概述 选项卡中 几乎没有显示 MySQL 架构 这些架构是现有数据库吗 启动 MySQL
  • Rails 在部分内用逗号分隔数组项

    Rails 中在部分内部创建逗号分隔列表的最优雅的方法是什么 我最近发现您可以使用部分来迭代从另一个视图模板发送的集合 所以在视图模板中我有 然后在 view directors director html erb中 这实际上做了类似的事情
  • 如何删除在设计器模式下创建的插槽?

    我已经创建了按钮cancelButton 然后我创建了函数槽on cancelButton clicked 使用上下文菜单项Go to slot 但是 过了一段时间 我删除了这个按钮 不再需要 并尝试删除该函数 但编译器给出错误undefi
  • 本地分析需要 Sonar 3.6 版本

    遇到 执行本地分析需要声纳版本 3 6 消息 当尝试在 eclipse 中使用声纳本地分析时 我刚刚安装了最新的CodeHaus http docs codehaus org display SONAR Installing SonarQu
  • 列表有简短的 contains 函数吗?

    给定一个列表xs和一个值item 如何检查是否xs包含item 即 如果任何元素xs等于item 有没有类似的东西xs contains item For performance considerations see Fastest way
  • 可以使用UIAppearance设置UINavigationItem的titleview吗?

    我目前使用此代码来设置导航项的 titleView void viewDidLoad UIImage navbarTitle UIImage imageNamed navbartitleview1 UIImageView imageView
  • 如何在 VS TextMateRules 中将标记设为粗体+斜体

    在 Visual Studio Code 中 我编辑 Markdown 文件 在编辑器中标记的文本 bold 被渲染bold以及标记的那个 italic 呈现在italic 但文字标记 bold and italic 简单地呈现为itali
  • Android:如何设计智能手机和平板电脑的应用程序?

    我知道已经有很多了博客文章 http android developers blogspot com 2011 02 android 30 fragments api html how to s http developer android
  • 设计用于初始化的VHDL状态机

    如何最明智地设计用于初始化芯片的 VHDL 状态机 我当前的设计是 伪代码 案例状态 当 s0 gt VHDL CODE FOR WRITING VALUE TO REGISTER状态 s1 当 s1 gt VHDL CODE FOR WR
  • 如何在 App Engine 中灵活更改 /dev/shm 的大小

    如何更改共享内存文件夹的大小 dev shm在 App Engine 灵活应用程序中 默认情况下 它设置为 64M 太低 无法运行许多应用程序 例如 Chrome 我看不出有什么办法可以改变它 如果您有权访问 可以通过多种方法进行更改doc
  • pandas Series.tolist() 中的 NaN 与 list 中的 NaN 的行为不同

    Why does gt gt import pandas as pd gt gt import numpy as np gt gt list pd Series np nan np nan 2 np nan 2 np nan np nan