Dump a NumPy array into a csv file
有没有办法将一个numpy数组转储到csv文件中?我有一个2d numpy数组,需要以人类可读的格式转储它。
1 2 3 | import numpy a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ]) numpy.savetxt("foo.csv", a, delimiter=",") |
您可以使用
1 2 | import pandas as pd pd.DataFrame(np_array).to_csv("path/to/file.csv") |
如果不需要标题或索引,请使用
1 2 3 | import numpy as np a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ]) a.tofile('foo.csv',sep=',',format='%10.5f') |
号
手册页上有一些有用的注释:
This is a convenience function for quick storage of array data.
Information on endianness and precision is lost, so this method is not
a good choice for files intended to archive data or transport data
between machines with different endianness. Some of these problems can
be overcome by outputting the data as text files, at the expense of
speed and file size.
号
注意事项。此函数不生成多行csv文件,它将所有内容保存到一行。
将记录数组作为带标题的csv文件写入需要做更多的工作。
此示例读取头在第一行的csv文件,然后写入相同的文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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) + ' ') np.savetxt(fp, ar, '%s', ',') |
注意,这个例子不考虑带逗号的字符串。要考虑非数字数据的报价,请使用
1 2 3 4 5 6 | 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()) |
。
如前所述,将数组转储到csv文件中的最佳方法是使用
例如,如果您有一个numpy数组,其中
1 2 3 | narr = np.array([[1,2], [3,4], [5,6]], dtype=np.int32) |
。
希望使用
1 | np.savetxt('values.csv', narr, delimiter=",") |
它将以浮点指数格式将数据存储为
1 2 3 | 1.000000000000000000e+00,2.000000000000000000e+00 3.000000000000000000e+00,4.000000000000000000e+00 5.000000000000000000e+00,6.000000000000000000e+00 |
。
您必须使用名为
1 | np.savetxt('values.csv', narr, fmt="%d", delimiter=",") |
号
以原始格式存储数据
以压缩gz格式保存数据另外,
我们只需要更改文件的扩展名,因为
1 | np.savetxt('values.gz', narr, fmt="%d", delimiter=",") |
号
希望有帮助
如果要在列中写入:
1 2 3 4 | for x in np.nditer(a.T, order='C'): file.write(str(x)) file.write(" ") |
。
这里"a"是numpy数组的名称,"file"是要在文件中写入的变量。
如果要在行中写入:
1 2 3 4 | writer= csv.writer(file, delimiter=',') for x in np.nditer(a.T, order='C'): row.append(str(x)) writer.writerow(row) |
。
您也可以使用纯Python来完成,而不需要使用任何模块。
1 2 3 4 5 6 7 8 | # format as a block of csv text to do whatever you want csv_rows = ["{},{}".format(i, j) for i, j in array] csv_text =" ".join(csv_rows) # write it to a file with open('file.csv', 'w') as f: f.write(csv_text) |
如果要将numpy数组(如
然后以正常方式保存到一个单元,使用
然后您可以这样恢复您的数组:埃多克斯1〔6〕
我相信你也可以简单地做到以下几点:
例如1:
1 2 3 4 5 6 7 | # Libraries to import import pandas as pd import nump as np #N x N numpy array (dimensions dont matter) corr_mat #your numpy array my_df = pd.DataFrame(corr_mat) #converting it to a pandas dataframe |
号
例如2:
1 2 3 4 | #save as csv my_df.to_csv('foo.csv', index=False) #"foo" is the name you want to give # to csv file. Make sure to add".csv" # after whatever name like in the code |
号
在python中,我们使用csv.writer()模块将数据写入csv文件。此模块类似于csv.reader()模块。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import csv person = [['SN', 'Person', 'DOB'], ['1', 'John', '18/1/1997'], ['2', 'Marie','19/2/1998'], ['3', 'Simon','20/3/1999'], ['4', 'Erik', '21/4/2000'], ['5', 'Ana', '22/5/2001']] csv.register_dialect('myDialect', delimiter = '|', quoting=csv.QUOTE_NONE, skipinitialspace=True) with open('dob.csv', 'w') as f: writer = csv.writer(f, dialect='myDialect') for row in person: writer.writerow(row) f.close() |
号
分隔符是用于分隔字段的字符串。默认值为逗号(,)。