将数据帧转换为 numpy 数组会导致所有数字以科学计数法打印 [关闭]

Posted

技术标签:

【中文标题】将数据帧转换为 numpy 数组会导致所有数字以科学计数法打印 [关闭]【英文标题】:Converting dataframe to numpy array causes all numbers to be printed in scientific notation [closed] 【发布时间】:2015-05-04 07:02:40 【问题描述】:

为了使用 scikit learn 进行交叉验证,我尝试提前将数据帧转换为 numpy 数组。所以我尝试了函数 df.as_matrix() ,结果数据看起来很奇怪。我想知道这是否正常。为什么它必须以这种奇怪的格式显示?

例如:585 变为 5.85000000e+02 ,并且 0 变成 0.00000000e+00

【问题讨论】:

它不必以那种奇怪的格式显示。例如,当我创建一个值为 585、0、0、585 和 print 的 2x2 浮点矩阵时,我将它们视为 585.0.。向我们展示您的代码,也许我们可以告诉您为什么它以这种格式显示。 我猜你遇到了浮点精度/舍入错误,这与 numpy 并没有真正的关系。 如果您进行任何类型的数字运算,您应该真的,真的了解scientific notation。 这里有一个明确的问题不是调试(为什么 numpy 数组经常以科学计数法打印?),以及一个解释了为什么在关闭前几个小时的答案。除了试图侮辱提问的人之外,关闭它还有什么意义? 【参考方案1】:

当您的数组中有大/小值需要科学记数法是合理的时,就会发生这种情况:在这种情况下,numpy 会以科学记数法打印所有值。例如:

In [65]: z
Out[65]:
array([[  1.00000000e+10,   1.00000000e+00,   2.00000000e+00],
       [  2.00000000e+00,   1.00000000e+00,   1.00000000e+00]])

In [66]: z[0,0]
Out[66]: 10000000000.0

In [67]: z[0,0]=1

In [68]: z
Out[68]:
array([[ 1.,  1.,  2.],
       [ 2.,  1.,  1.]])

可以使用np.set_printoptions 修改行为,但您需要弄清楚您想要什么行为。如果您有大量数字,suppress= 实际上不起作用。请参阅this answer 了解更多信息。

基本上,numpy 希望您的数字一致地打印出来,而不是让每个数字都以最方便的格式打印。除了编写自己的浮点格式化程序并将其传递给 set_printoptions 之外,似乎没有一种简单的方法可以改变这一点。


其实,试试这个:

In [102]: np.set_printoptions(formatter='float':":6.5g".format)

In [103]: z
Out[103]:
array([[  1e+10,       1,       2],
       [      2,       1,       1]])

这实质上是告诉 numpy 格式化浮点数,因为它们将被 python 的 format 格式化,":6.5g" 为 format specification。

【讨论】:

以上是关于将数据帧转换为 numpy 数组会导致所有数字以科学计数法打印 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将稀疏的 pandas 数据帧转换为 2d numpy 数组

将结构化 numpy 数组(包含子数组)转换为 pandas 数据帧

如何将 OHLCV 命名数据数组转换为 numpy 数据帧?

python 使用ffmpeg-python将numpy数组转换为视频帧

将数据框转换为 Numpy 数组 [重复]

如何将csv文件转换为numpy数组格式?