将一个NumPy数组转换成一个csv文件

有没有办法将一个NumPy数组转储到一个CSV文件? 我有一个2D NumPy数组,需要将其转储为可读的格式。

numpy.savetxt将数组保存到文本文件。

 import numpy a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ]) numpy.savetxt("foo.csv", a, delimiter=",") 

tofile是一个方便的function来做到这一点:

 import numpy as np a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ]) a.tofile('foo.csv',sep=',',format='%10.5f') 

手册页有一些有用的注意事项:

这是快速存储arrays数据的一个方便function。 字节顺序和精度方面的信息丢失了,所以这种方法不适合用于存储不同字节顺序的机器之间的数据或传输数据的文件。 其中一些问题可以通过以文本文件forms输出数据来克服,但是速度和文件大小都会增加。

注意。 这个function不会产生多行的csv文件,它将所有内容保存到一行。

用pandas轻松快捷

 import pandas as pd df = pd.DataFrame(np_array) df.to_csv("file_path.csv") 

将logging数组写为带有标题的CSV文件需要更多的工作。

本示例首先读取带有标题的CSV文件,然后写入相同的文件。

 import numpy as np # Write an example CSV file with headers on first line with open('example.csv', 'w') as fp: fp.write('''\ col1,col2,col3 1,100.1,string1 2,222.2,second string ''') # Read it as a Numpy record array ar = np.recfromcsv('example.csv') print(repr(ar)) # rec.array([(1, 100.1, 'string1'), (2, 222.2, 'second string')], # dtype=[('col1', '<i4'), ('col2', '<f8'), ('col3', 'S13')]) # Write as a CSV file with headers on first line with open('out.csv', 'w') as fp: fp.write(','.join(ar.dtype.names) + '\n') np.savetxt(fp, ar, '%s', ',') 

请注意,这个例子不考虑带有逗号的string。 要考虑非数字数据的引用,请使用csv包:

 import csv with open('out2.csv', 'wb') as fp: writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC) writer.writerow(ar.dtype.names) writer.writerows(ar.tolist()) 

如果你想保存你的numpy数组(例如your_array = np.array([[1,2],[3,4]]) )到一个单元格,你可以先用your_array.tolist()来转换它。

然后以正常的方式保存到一个单元格,用delimiter=';' 而csv文件中的单元格将如下所示[[1, 2], [2, 4]]

然后你可以像这样恢复你的数组: your_array = np.array(ast.literal_eval(cell_string))

如果你想写在列中:

  for x in np.nditer(aT, order='C'): file.write(str(x)) file.write("\n") 

这里'a'是numpy数组的名字,'file'是写入文件的variables。

如果你想写行:

  writer= csv.writer(file, delimiter=',') for x in np.nditer(aT, order='C'): row.append(str(x)) writer.writerow(row) 

你也可以用纯python来做,而不使用任何模块。

 # format as a block of csv text to do whatever you want csv_rows = ["{},{}".format(i, j) for i, j in array] csv_text = "\n".join(csv_rows) # write it to a file with open('file.csv', 'w') as f: f.write(csv_text)