【问题标题】:Numpy.savetxt to save string and float in the meantime and maintain the precision of the floatNumpy.savetxt 同时保存字符串和浮点数并保持浮点数的精度
【发布时间】:2026-01-16 14:50:02
【问题描述】:

我写了一个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' 同时保存字符串和浮点数。

如何解决这个问题?

【问题讨论】:

    标签: python csv numpy


    【解决方案1】:

    在这一行:

    f = numpy.vstack((e, d))
    

    vstackd 的类型强制转换为e 的类型。你可以通过打印f.dtype来检查。

    你应该像这样构建f

    f = np.zeros(1,dtype=('|S5, float64'))
    f[0] = e[0],d
    

    如果您不理解上述行,请参阅结构化数组的文档,特别是 this 段落。

    在打印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 的步骤。现在可以用了吗?
    • 谢谢您,您的代码确实有效,但结果不是我想要的,即浮点数在字符串