numpy中的小数

时间:2018-12-05 22:29:59

标签: python pandas numpy

我有一个看起来像这样的数据框-

     ID     NoNotifications NotificationsNot    total   Percent of people
    2544        272500          762              117         0.0
    2415        2288378        256575            655         0.0
    2558        192505         470610             7          0.0

我正在跑步-

for index, row in percent.iterrows():
   print((117/300000)*100)
   row['Percent of people'] = row['total']/(row['NoNotifications'] + row['NotificationsNot'])*100

为什么print语句以至少3个精度点打印一个十进制值。例如,0.039,但是第二条语句仅将0.0输出到Percent of people列。

更新

我尝试了row['Percent of people'] = (655/254495300*100),但在0.0列中仍然有很多Percent of people

更新2

还尝试了repr((Decimal(655)/254495300*100)),但还是一样。

3 个答案:

答案 0 :(得分:0)

列显示是数据帧的渲染功能vibT的结果。默认情况下,这一位默认为小数点后一位。有关更改此设置的详细信息,请参见PANDAS文档。

您的__repr__语句使用Python呈现浮点数。在这种情况下,渲染程序会识别出最后一个非零数字位于第1000位,并在该点处截断显示。

答案 1 :(得分:0)

您可以将float格式化程序函数作为参数传递给数据框的to_string方法:

print(df.to_string(float_format=lambda f: '{:3.2e}%'.format(100 * f)))

在使用2.57e-04%时将输出{:.4}%,将输出0.0003%。上面的功能是一个简短可用的选择,但是如果您要打印例如对于大多数值,其值为“ 1.23%”,但对于百分之一以下的值使用指数表示法。

答案 2 :(得分:0)

来自numpy docs-

import numpy as np
np.set_printoptions(suppress=True)

将确保“始终使用定点表示法打印浮点数,在这种情况下,当前精度为零的数字将打印为零”

In[2]: import numpy as np

In[3]: np.array([1/50000000])
Out[3]: array([2.e-08])

In[4]: np.set_printoptions(suppress=True)
In[5]: np.array([1/50000000])
Out[5]: array([0.00000002])

In[6]: np.set_printoptions(precision=6)
In[7]: np.array([1/50000000])
Out[7]: array([0.])