python 科学计数法的小数转换

python 科学计数法的小数转换

一. 问题

float转换str时,使用str()方法可以便捷的实现转换.但小数位太长的数会默认转换为科学计数法的格式,如:

>print(str(0.000001))
1e-06

实际应用中,这种形式的数据往往不是我们想要的.
本文要解决的问题是将一个str格式的带有科学计数法数值的二维数组转换为小数形式

输入数据(str)
-999.    0.    0.    0.    0.
0. 0. 0. 0. 0.
5.00e-02 5.20e+01 2.55e+02 2.55e+02 2.55e+02
6.00e-02 6.90e+01 1.95e+02 2.53e+02 2.55e+02
8.00e-02 1.29e+02 2.21e+02 9.00e+01 2.55e+02
1.00e-01 2.55e+02 1.87e+02 1.50e+01 2.55e+02
1.50e-01 2.55e+02 6.90e+01 1.00e+00 2.55e+02
2.00e-01 2.55e+02 1.50e+02 1.50e+01 2.55e+02
0.4 255.   87.   15.  255. 

期望输出(str)
-999.      0.      0.      0.      0.  
0.      0.      0.      0.      0.  
0.05   52.    255.    255.    255.  
0.06   69.    195.    253.    255.  
0.08  129.    221.     90.    255.  
0.1   255.    187.     15.    255.  
0.15  255.     69.      1.    255.  
0.2   255.    150.     15.    255.  
0.4   255.     87.     15.    255.  

二. 解决方法

查找到的方法有几种:

1. 格式化字符串f-string语法

https://docs.python.org/3.4/library/string.html#format-specification-mini-language

> number = 0.0000001
> f"Number: {number}"
'Number: 1e-07'
> f"Number: {number:f}"
'Number: 0.000000'
> f"Number: {number:.10f}"
'Number: 0.0000001000'

只能用于单个浮点数操作

2. numpy取消科学计数法

numpy取消科学计数法.
suppress=True 表示取消科学记数法

>import numpy as np
>np.set_printoptions(suppress=True, threshold=np.nan)

3. pandas取消科学计数法

>import pandas as pd
>pd.set_option('display.float_format',lambda x : '%.3f' % x)

三 . 完整代码

def table_process(table):
    np.set_printoptions(suppress=True)
    table_arr = np.fromstring(table, sep='\n')
    table_arr = color_arr.reshape((table_arr.size//5, 5))
    new_table = str(table_arr)
    new_table = re.sub('\\[', '', new_table)
    new_table = re.sub('\\]', '', new_table)
    return new_table

你可能感兴趣的:(python,numpy)