熊猫:可变精度,可导出到csv

时间:2019-01-23 19:26:00

标签: pandas

如何设置可调精度,以便根据其值进行自我调整?这是要导出到csv。

例如,以下值:

将最大精度设置为18。

0.00748333333333333 -> 0.00748333333333
12.0000000 -> 12.0
0.43242300000 -> 0.432423

2 个答案:

答案 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

以防这是一个破坏交易的事情。