【发布时间】: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 中有更简单的方法吗?
【问题讨论】:
-
我知道
int和NaN的问题,并且ints 通常会转换为float来处理缺失值。我希望通过将 dytpe 设置为object来解决它。第二个例子确实给了我想要的东西;我没有删除任何条目。第二个示例的结果等价于pd.Series([1, np.nan], dtype=object)。编辑:我正在回复的家长删除了他们的评论。 -
s.loc[i] = s[i].astype(int)也可以。不知道为什么。