使用numpy.savetxt()将数据写入CSV时缺少第一个条目

时间:2018-12-21 01:10:33

标签: python python-3.x csv numpy

我正在尝试使用逗号分隔符使用numpy.savetxt将numpy数组写入.csv,但是它缺少第一个条目(第1行第1列),我也不知道为什么。

我刚开始使用Python编程,这可能只是我调用numpy.savetxt或定义数组的方式的问题。无论如何,这是我的代码:

import numpy as np
import csv

# preparing csv file
csvfile = open("np_csv_test.csv", "w")
columns = "ymin, ymax, xmin, xmax\n"
csvfile.write(columns)
measurements = np.array([[0.9, 0.3, 0.2, 0.4],
                     [0.8, 0.5, 0.2, 0.3],
                     [0.6, 0.7, 0.1, 0.5]])

np.savetxt("np_csv_test.csv", measurements, delimiter = ",")

我希望在标题ymin,ymax,xmin和xmax下有3行的四列,但我确实做到了,但是我却没有0.9。就像我的.csv的第2行第1栏是空的,在记事本中我得到的是:

ymin, ymax, xmin, xmax
,2.999999999999999889e-01,2.000000000000000111e-01,4.000000000000000222e-01
8.000000000000000444e-01,5.000000000000000000e-01,2.000000000000000111e-01,2.999999999999999889e-01
5.999999999999999778e-01,6.999999999999999556e-01,1.000000000000000056e-01,5.000000000000000000e-01

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

使用输出文件的路径调用np.savetxt时,它将尝试覆盖任何现有文件,而这不是您想要的。您可以通过以下方法使用列标题编写所需的文件:

import numpy as np

# preparing csv file
columns = "ymin, ymax, xmin, xmax"
measurements = np.array([[0.9, 0.3, 0.2, 0.4],
                     [0.8, 0.5, 0.2, 0.3],
                     [0.6, 0.7, 0.1, 0.5]])

np.savetxt("np_csv_test.csv", measurements, delimiter = ",", header=columns)

正如安迪(Andy)在评论中指出的那样,您可以通过传递文件句柄而不是文件名来使np.savetxt附加到现有文件中。因此,获取所需文件的另一种有效方法是:

import numpy as np
import csv

# preparing csv file
csvfile = open("np_csv_test.csv", "w")
columns = "ymin, ymax, xmin, xmax\n"
csvfile.write(columns)
measurements = np.array([[0.9, 0.3, 0.2, 0.4],
                     [0.8, 0.5, 0.2, 0.3],
                     [0.6, 0.7, 0.1, 0.5]])

np.savetxt(csvfile, measurements, delimiter = ",")
# have to close the file yourself in this case
csvfile.close()