当前位置: 首页 > 知识库问答 >
问题:

NumPy或Pandas:在具有NaN值时将数组类型保持为整数

隗轶
2023-03-14

是否有一种首选方法可以将numpy数组的数据类型固定为int(或int64或其他任何类型),同时仍将数组中的元素列为numpy.NaN

特别是,我正在将内部数据结构转换为熊猫数据帧。在我们的结构中,我们有仍然具有NaN的整型列(但是列的dtype是int)。如果我们将其作为DataFrame,它似乎会将所有内容重铸为浮点数,但我们真的希望成为int

思想?

尝试过的事情:

我尝试在熊猫下使用from_records()函数。DataFrame,与coerce_float=False,这没有帮助。我还尝试使用NumPy屏蔽数组,NaNfill_value,这也不起作用。所有这些都导致列数据类型变为浮点数。

共有3个答案

耿俊彦
2023-03-14

如果性能不是主要问题,则可以存储字符串

df.col = df.col.dropna().apply(lambda x: str(int(x)) )

然后,您可以将其与NaN任意混合。如果您确实想要整数,根据您的应用程序,您可以使用-1,或0,或1234567890,或其他一些专用值来表示NaN

您还可以临时复制列:一个是带有浮点数的列;另一个是实验性的,带有int或string。然后在每个合理的位置插入断言,检查两者是否同步。经过足够的测试,你可以放开浮子。

阎德宇
2023-03-14

此功能已添加到熊猫(从0.24版本开始):https://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html#optional-integer-na-support

此时,它需要使用扩展名dtype Int64(大写),而不是默认的dtype Int64(小写)。

汤跃
2023-03-14

NaN不能存储在整数数组中。这是目前已知的熊猫限制;我一直在等待NumPy中NA值的进展(类似于R中的NAs),但NumPy获得这些功能至少需要6个月到一年的时间,似乎:

http://pandas.pydata.org/pandas-docs/stable/gotchas.html#support-对于整数na

(此功能是从pandas的0.24版开始添加的,但请注意,它需要使用扩展名dtype Int64(大写),而不是默认的dtype Int64(小写):https://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html#optional-整数(不支持)

 类似资料:
  • 问题内容: 有没有一种首选的方法来将numpy数组的数据类型固定为int(int64或其他),同时仍将元素内部列出为? 特别是,我正在将内部数据结构转换为。在我们的结构中,我们有仍具有NaN的整数类型的列(但该列的dtype为int)。如果将其设为,似乎将所有内容重铸为float,但我们真的很想成为int。 有什么想法吗? 尝试过的事情: 我尝试在下使用该功能,但这并没有帮助。我还尝试使用带有Na

  • 问题内容: 有没有一种方法可以将NaN存储在整数的Numpy数组中?我得到: 问题答案: 不,至少在当前版本的NumPy中不能。A是 仅对 float数组的特殊值。 有人在谈论引入一个特殊的位,该位将允许非浮点数组存储实际上与a相对应的内容,但到目前为止(2012/10),这仅仅是个话题。 同时,您可能需要考虑使用该程序包:您可以使用特殊值表示无效值,而不是选择像-99999这样的无效整数。

  • 问题内容: 有没有一种快速的方法用(例如)线性插值替换numpy数组中的所有NaN值? 例如, 将被转换成 问题答案: 让我们首先定义一个简单的辅助函数,以使其更直接地处理NaN的索引和逻辑索引: 现在可以像这样使用: -– 尽管指定一个单独的函数来执行以下操作似乎有点过头了: 它最终将支付股息。 因此,每当您处理与NaNs相关的数据时,只需将其所需的所有(新的与NaN相关的新功能)封装在某些特定

  • 问题内容: 我期望得到,但我得到: 问题答案: 并非所有的Nan都是相同的: 因此, 包含,它们是相同的,所以 但包含不相同的: 因此set不会将它们视为相等: 如果您有熊猫系列,请使用它的方法而不是查找唯一值:

  • 问题内容: 我想在numpy数组中设置特定值(以将它们从按行均值计算中排除)。 我试过了 看着,我只会看到我的期望。 我想到了一个替代方案: 没发生什么事。我究竟做错了什么? 问题答案: 将适当元素设置为NaN的矢量化方法 @unutbu的解决方案必须摆脱您得到的值错误。如果您希望获得性能,可以这样使用- 样品运行- 向量化方法可直接计算适当元素的按行平均值 如果要获取掩盖的平均值,则可以修改较早

  • 我在转换一个列时遇到问题,该列同时包含字符串格式(类型:str)和NaN(类型:float64)的两位数。我想得到一个这样的新列:NaN是NaN,整数是2位数的字符串格式。例如:我想从列YearBirth1获取列Yearbirth2,如下所示: 我试过这个: 正如我所料,我得到了这个错误: 所以我尝试了这个: 得到了这个错误: 最后我尝试了这个: 没有错误,但当我检查列YearBirth2时,结果