如何设置可调精度,以便根据其值进行自我调整?这是要导出到csv。
例如,以下值:
将最大精度设置为18。
0.00748333333333333 -> 0.00748333333333
12.0000000 -> 12.0
0.43242300000 -> 0.432423
答案 0 :(得分:0)
可能的解决方案是使用正则表达式替换保存的CSV文件上不需要的零:
import re
df = pd.DataFrame({
'x1':[*np.random.randn(5), *[2, 3, 1.25]],
'x2':[*np.random.randn(5), *[2, 3, 1.25]],
})
# Save CSV file
csv_file_name = 'test.csv'
df.to_csv(csv_file_name, float_format="%0.8f")
# Read CSV file
with open(csv_file_name, 'r') as file:
s = file.read()
# Replace zeros using regex
s = re.sub("[0]+\n", "\n", s)
s = re.sub("[0]+,", ",", s)
# Re-save CSV file
with open(csv_file_name, 'w') as file:
file.write(s)
生成的CSV:
,x1,x2
,-0.48248428,0.37133094
1,-0.58110733,-1.08972915
2,-0.25407414,-0.83307601
3,-0.73887322,-0.37982818
4,0.11092894,0.93965402
5,2.,2.
6,3.,3.
7,1.25,1.25
答案 1 :(得分:0)
我认为最自然的方法是使用float_format
参数和漂亮的%.pg
格式,该格式最多指定 p
个有效数字:< / p>
df=pd.DataFrame([0.0074833333333,12.00000000,0.4324300000])
df.to_csv('bla.csv',float_format='%.10g')
因此生成的文件:
/home/uperetz>cat bla.csv
,0
0,0.007483333333
1,12
2,0.43243
请注意,如果最高有效位使得科学符号会更短(或多或少,有此决策的公式),则将使用科学计数法:
>>>print('%.10g'%0.0000000000000000000000000012)
1.2e-27
以防这是一个破坏交易的事情。