【问题标题】:Convert Pandas Series to 'object' dtype with `int` and `nan` elements [duplicate]使用“int”和“nan”元素将 Pandas 系列转换为“object”dtype [重复]
【发布时间】:2023-03-20 21:30:02
【问题描述】:

我有一个包含整数条目的系列,但也有一些空条目。它表示为带有dtype=float64 的系列。我想将其转换为带有dtype=object 的系列,其中整数条目存储为Python ints,空条目存储为np.nans。

我在下面有两次尝试。第一个不起作用,因为int(出乎意料?)仍然转换为float。第二个如我所愿。

s = pd.Series([1, np.nan])

s = s.astype(object)
i = s.notnull()
s[i] = s[i].astype(int)

type(s[0])

sn-p 以上返回float。 :(

s = pd.Series([1, np.nan])

s = s.astype(object)
i = s.notnull()
s[i] = list(s[i].astype(int))

type(s[0])

sn-p 以上返回int。 :)

为什么第一个例子不起作用,即使系列有dtype=object?转换为 list 似乎是一个非常奇怪的 hack 来让它工作,但我找不到任何其他方法来做到这一点。

在 Pandas 中有更简单的方法吗?

【问题讨论】:

  • 我知道intNaN 的问题,并且ints 通常会转换为float 来处理缺失值。我希望通过将 dytpe 设置为 object 来解决它。第二个例子确实给了我想要的东西;我没有删除任何条目。第二个示例的结果等价于pd.Series([1, np.nan], dtype=object)。编辑:我正在回复的家长删除了他们的评论。
  • s.loc[i] = s[i].astype(int) 也可以。不知道为什么。

标签: python pandas na series


【解决方案1】:

关于在 Pandas 中是否有更简单的方法来执行此操作,从版本 0.24(2019 年 1 月)开始,您可以在 Series 具有整数值和缺失数据的情况下使用 nullable integers

In [120]: s.astype('Int64')
Out[120]:
0      1
1    NaN
dtype: Int64

In [121]: type(s.astype('Int64')[0])
Out[121]: numpy.int64

In [122]: type(s.astype('Int64')[1])
Out[122]: float

【讨论】:

  • @jpp 答案并不相同,操作人员已努力调整每个答案。相反,您可以将问题作为重复项关闭投票。您还只需要发表一条评论,而不是在每个问题下都复制它。它近乎骚扰。
  • @YvetteColomb,很公平,我已经将这些投票给了一个已经处理旧版本的规范,将 ping fuglede 在那篇帖子上给出详细的答案。由于这个功能是实验性的,我们希望 API 不会改变,如果改变了,用户会很高兴地改变他们的六个帖子。
  • @fuglede,我已经将几个帖子作为this canonical 的副本进行了近距离投票。请在该重复目标上发布答案。特别是,this one 有很好的细节,应该在规范上引起更多的关注。
  • @jpp 我不确定您是否知道,但是在帖子下发布任何评论都会向该帖子的 OP 发出通知。此外,如果 API 发生更改,则不一定需要更新答案,可以发布新的更新帖子。该网站并非一成不变。
  • @YvetteColomb,我知道。但我觉得在每个可能的问答中都写一篇关于新功能的帖子有点奇怪(而且适得其反)除了人们将要接触/阅读的规范。
猜你喜欢
  • 2014-02-12
  • 2017-01-03
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
相关资源
最近更新 更多