我有一个包含数字的表格,如5E-7,10E-4,但数字是精确到几个小数点,如5.646273838E-7。我知道我可以在python中使用round函数来设置精度,但由于我的所有数字都有所不同,我希望能够将每个数据舍入为2 d.p但仍然保持答案中的指数。所以我希望5.646273838E-7成为5.64E-7和2.38212538E-4成为2.38E-4。我试图使用一种方法,我可以将我的数字转换为字符串然后计算字符串长度,所以对于5.646273838E-7,如果字符串长度是~17,我将舍入设置为(17-2)* 0.5并且它有点像我的数据范围。但是,有人可以提出更好的方法吗?
@ user545424:嘿,这是一个非常有用的事情,要知道并完成这项工作,除了我的数据是从一个包含字符串和数字的文本文件中读取的。字符串是对象的名称,例如:
名称Prop_1 Prop_2
object_1 5.343e-10 2.574e-10
然后我使用以下代码读取并将其显示为表格并另存为乳胶文件 numpy.set_printoptions(精密= 2)
out=numpy.loadtxt('data.txt', dtype=str,usecols=(0,1,2,3))
col=zip(*out)
tab=Table(col)
tab.write('table',format='latex')
print(tab)
由于
答案 0 :(得分:5)
>>> format(0.1234, '.2e')
'1.23e-01'
您需要format
函数和密切相关的str.format
方法。 .2
表示"小数点后的2位数",e
表示科学记数法。有很多选择;有关详细信息,请参阅format string syntax specification。
答案 1 :(得分:2)
如果您使用的是numpy数组,则可以使用np.round()
。例如:
>>> import numpy as np
>>> a = np.random.rand(4,3)
>>> a
array([[ 0.77600629, 0.76947092, 0.8145481 ],
[ 0.08514862, 0.67965067, 0.90147548],
[ 0.88886939, 0.57478246, 0.38501869],
[ 0.57264822, 0.3376192 , 0.55660758]])
>>> np.round(a,2)
array([[ 0.78, 0.77, 0.81],
[ 0.09, 0.68, 0.9 ],
[ 0.89, 0.57, 0.39],
[ 0.57, 0.34, 0.56]])
编辑:
如果您需要保留一定数量的有效数字而不仅仅是圆形数字,则可以使用np.set_printoptions()
执行此操作:
>>> np.set_printoptions(precision=2)
>>> b = a*1e-10
>>> b
array([[ 7.76e-18, 7.69e-18, 8.15e-18],
[ 8.51e-19, 6.80e-18, 9.01e-18],
[ 8.89e-18, 5.75e-18, 3.85e-18],
[ 5.73e-18, 3.38e-18, 5.57e-18]])