我有一个形状为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/