我有一个形状为numpy的数组(444,445),我需要将其转储为csv文件。可以通过以下方法实现这一目标:

np.savetxt('outfile.txt',array, delimiter=',',fmt="%s")


我使用fmt="%s"选项,因为在每一行的末尾(数组的444元素是NaN)。

我要完成的工作是编写一个5列宽的csv文件,共有39,516行(即89个部分,每个部分由5列和444行组成),最后将NaN编写为第444行末尾的空白元素。这样,矩阵中元素的数量相等:89x5x444=444x445,即197,580条数据。

例如:

  1 xxxx,xxxx,xxxx,xxxx,xxxx,
  2 xxxx,xxxx,xxxx,xxxx,xxxx,
    ...
    ...
 89 xxxx,xxxx,xxxx,xxxx,
 90 xxxx,xxxx,xxxx,xxxx,xxxx,
 91 xxxx,xxxx,xxxx,xxxx,xxxx,
    ...
    ...
178 xxxx,xxxx,xxxx,xxxx,


我添加了行号,以便在问题中更清楚地说明。我不希望它出现在实际输出中。

这样做的有效和Python方式是什么?

目前,我正在尝试根据我的情况调整对此问题的答案:

Write to list to rows with specific number of columns

最佳答案

希望我能理解您的要求

# Reshape it

array_.reshpe(89,444,5)

# Change it's dtype to str so you can replace NaN by white spaces

array_.astype(str)

# Replace nan by white spaces

array_[array_ == 'nan'] = ''


# Finaly, save it SEE EDIT


编辑

我认为np.savetxt不适用于2维以上的numpy数组,因此,参考this answer我们可以尝试以下方法:

# Write the array to disk
with file('test.txt', 'w') as outfile:
    # I'm writing a header here just for the sake of readability
    # Any line starting with "#" will be ignored by numpy.loadtxt
    outfile.write('# Array shape: {0}\n'.format(array_.shape))

    # Iterating through a ndimensional array produces slices along
    # the last axis. This is equivalent to array_[i,:,:] in this case
    for data_slice in array_:

        # The formatting string indicates that I'm writing out
        # the values in left-justified columns 7 characters in width
        # with 2 decimal places.
        np.savetxt(outfile, data_slice, fmt='%-7.2f')

        # Writing out a break to indicate different slices...
        outfile.write('# New slice\n')

关于python - 将numpy数组写入具有特定列数的csv文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30665454/

10-12 20:23