Python Numpy.savetxt同时保存字符串和浮点,并保持浮点的精度

Python Numpy.savetxt同时保存字符串和浮点,并保持浮点的精度,python,csv,numpy,Python,Csv,Numpy,我写了一个python脚本 import numpy a = 8.3 b = 8.29993191 c = abs(a - b) print c d = numpy.array(c) e = ['value'] f = numpy.vstack((e, d)) print f g = ['valuesssssssssssss'] h = numpy.vstack((g, d)) print h numpy.savetxt('2k.csv', f, '%s', delimiter = ',')

我写了一个python脚本

import numpy

a = 8.3
b = 8.29993191
c = abs(a - b)
print c
d = numpy.array(c)
e = ['value']
f = numpy.vstack((e, d))
print f
g = ['valuesssssssssssss']
h = numpy.vstack((g, d))
print h

numpy.savetxt('2k.csv', f, '%s', delimiter = ',')
这是输出

6.8090000001e-05
[['value']
 ['6.809']]
[['valuesssssssssssss']
 ['6.8090000001e-05']]
显然,我要保存到csv文件中的浮点值的精度取决于字符串的长度,因为我需要使用“%s”同时保存字符串和浮点值

如何解决这个问题?

在这一行:

f = numpy.vstack((e, d))
vstack
正在将
d
的类型强制为
e
的类型。您可以通过打印
f.dtype
来检查这一点

您应该像这样构建
f

f = np.zeros(1,dtype=('|S5, float64'))
f[0] = e[0],d
如果您不理解上面这一行,请参阅结构化数组上的文档,特别是段落

打印
f
时,可以选择不同的格式说明符。使用
15
数字和科学符号,您可以选择:

np.savetxt('2k.csv', f, fmt = ('%s','%.15e'),delimiter = ',')
生成的文件是

# cat 2k.csv
value,6.809000000096432e-05
要在字符串下保存数字,请使用
savetxt
的自定义格式:

np.savetxt('2k.csv', f, fmt = '%s\n%.15e')
哪些产出:

# cat 2k.csv
value
6.809000000096432e-05

我尝试了您的代码numpy.savetxt('2k.csv',f,fmt=('%s','.15e'),delimiter=',')),但出现了此错误,AttributeError:fmt的形状错误。('%s','.15e')上述代码有效。我对答案进行了编辑,使其与初始化
f
的步骤完全匹配。现在可以工作了吗?谢谢,你的代码可以工作了,但是结果不是我想要的,也就是说,浮点在字符串下面。