我先说两件事:
我正在将一个项目从R移植到python,并且正在努力寻找一个好的方法来翻译文本到浮点的转换过程。具体来说,我是:
error='coerce'
选项强制将文本强制转换为浮点如何让pandas简洁地将浮点值的文本表示强制转换为相应的浮点值?
我遇到的问题是数值精度。例如:
In[1]: pd.to_numeric('3.785', errors='coerce')
Out[2]: 3.7850000000000001
我理解为什么会发生这种情况(即3.785以一种在底层二进制表示中不容易表示的方式表示)。我想弄清楚的是,是否有一种方法可以有效地解决为什么会发生这种情况。在
例如,在R中,引擎盖下有很多事情发生,但是as.数字API,您将得到表面上由文本值表示的数字:
^{pr2}$这是我想要的行为。使用pandas/python可以吗?我愿意合并其他软件包,或者被告知“那是不可能的”
我不确定你问的是精度还是精度的显示(格式),但希望这个答案能解决这两个问题。在
在幕后,r和pandas很可能会做同样的事情,但默认的显示方式却让它看起来不一样。例如,如果您想更好地了解r是如何存储数字的,可以这样做:
当然,一旦你超过了小数点后14位左右,你就超过了可以存储在双精度浮点中的数值,而这些数字并没有真正意义。不过,这至少应该足以证明r并没有真正地将其存储为确切地
3.785
。在诚然,有一个比这更为严格的答案,但作为一个实际问题,“忽略任何超过小数点后13或14的东西”对于标准数据工作来说几乎总是足够的(而且几乎可以肯定的是,你最好把时间花在其他地方,而不是担心小数点后14位)。在
我不能确切地说为什么您使用的pandas函数显示的是},但是一般来说,您可以在numpy和pandas的不同部分获得不同级别的默认显示精度。例如,如果只在数字周围加上
^{pr2}$3.7850000000000001
,而不是{[
和]
(传递一个列表而不是标量),pd.to_numeric
将输出一个numpy数组,并显示较少的小数位数:如果传递的是序列而不是列表,也会得到类似的显示输出。如果需要特定级别的显示精度,只需显式指定:
因此,当您显式显示20个小数位时,在r和pandas/numpy中可以看到相同的数字表示。在
也许值得一提的是,python确实提供了一个Decimal type,它具有精确的小数(不同于单精度或双精度浮点),但很少将其用于数据科学或数值应用,因为它不是原生的pandas类型,性能通常会很差。我相信它主要是为了会计应用。在
相关问题 更多 >
编程相关推荐