将数据帧转换为 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 数据帧?