将pandas中的浮点转换为字符串时的精度损失

2024-04-27 14:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python将一些浮点(一些短一些长一些)转换成字符串,得到了意外的(?)结果:

案例1

pd.options.display.float_format = '{:.2f}'.format
pd.DataFrame({'x': [12345.67]})

           x
0   12345.67

案例2

^{pr2}$

案例3

pd.DataFrame({'x': [1234589890878708980.67]})

                         x
0   1234589890878708992.00

我甚至尝试过np.float128和{}的数据类型,但是没有用。在

有人能解释一下这里发生了什么,在案例2和案例3中“适当”的转换是可行的吗?在

谢谢!在


Tags: 字符串formatdataframedisplaynpfloat案例options
1条回答
网友
1楼 · 发布于 2024-04-27 14:30:20

恐怕这个“问题”发生在Python(而不是pandas)方面。当您有一些即时值,如1234589890878708980.67时,它会被识别为float,并立即失去精度,例如:

>>> 1234589890878708980.67
1.234589890878709e+18
>>> 1234589890878708980.67 == 1234589890878708980.6712345
True

您可以尝试类似decimal.Decimal

^{pr2}$

编辑:

OP在评论中添加了一些问题。在

However, do I understand it right that for this method work correctly the value should be string in the first place?

是:)

What if it's float read from csv file?

afaikpython的csv读取器不应该执行任何类型转换,您将得到稍后可以自由转换的字符串。否则,如果您使用的是pandas.read_csv,您可以尝试设置dtype和{}参数(也可以要求pandas加载纯字符串,稍后自己转换这些值)。在

相关问题 更多 >