在pandas.to_numeric中垂降为float16

时间:2019-06-18 00:54:05

标签: python pandas numpy

我想知道为什么pd.to_numeric方法不能向下转换为np.float16。 该代码说:

# pandas support goes only to np.float32,
# as float dtypes smaller than that are
# extremely rare and not well supported

链接到代码:https://github.com/pandas-dev/pandas/blob/baa77c33fb71c29acea21ba06adaf426ed4cb561/pandas/core/tools/numeric.py#L164

非常稀有?我有很多DataFrame,它们的值完全适合np.float16数组。 没有很好的支持?您能提供更多细节吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以精确地将许多数据放入np.float16类型中,但是当您使用这些数字进行计算时通常会出现问题。正如unutbu所说:

  

float16s会很快累积算术错误:np.array([0.1,0.2],dtype ='float16')。sum()等于(大约)0.2998。尤其是当计算需要数千次算术运算时,对于许多应用程序来说,这可能是不可接受的错误量。

您甚至可以忽略与错误有关的各种数据大小问题。当使用nan无法物理处理的极小值和极大值时,会出现infinitynp.float16问题。这将其用处限制在特定的计算上,而这些计算在现实世界中不太可能使用。最大可表示值实际上只有65504。随着我们计算机拥有的更大的存储和处理能力,实际上不再需要限制自己了。因此,熊猫人刚决定不允许在pd.to_numeric中使用它,因为在存在很多缺点的同时,它的用途并不多。许多软件甚至都不支持这种类型,因为它不常用,这就是它们没有得到很好支持的意思。

当然,您可以想出大量适合np.float16格式的示例,但也有很多很多不适合的示例。这并不是说没有应用程序中较小的数字更好。但是这些应用程序可能不会使用熊猫。