如何将NumPy数组转储为人类可读格式的csv文件?


当前回答

numpy。Savetxt将数组保存到文本文件中。

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

其他回答

你可以用熊猫。它确实需要一些额外的内存,所以它并不总是可行的,但它非常快速和易于使用。

import pandas as pd 
pd.DataFrame(np_array).to_csv("path/to/file.csv")

如果你不想要一个头或索引,使用to_csv("/path/to/file.csv", header=None, index=None)

将记录数组写入带标题的CSV文件需要更多的工作。

这个例子从一个CSV文件(example. CSV)中读取,并将其内容写入另一个CSV文件(out.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', encoding='ascii')
print(repr(ar))
# rec.array([(1, 100.1, 'string1'), (2, 222.2, 'second string')], 
#           dtype=[('col1', '<i8'), ('col2', '<f8'), ('col3', '<U13')])

# 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', ',')

注意,上面的例子不能处理带有逗号的字符串的值。要始终将非数字值括在引号内,请使用csv内置模块:

import csv

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

如果你想写在列:

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

这里'a'是numpy数组的名称,'file'是要写入文件的变量。

如果你想写一行:

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

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

然后以正常的方式保存到一个单元格,分隔符=';' csv-file中的单元格看起来像这样[[1,2],[2,4]]

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

NumPy .savetxt()方法用于将NumPy数组保存到输出文本文件中,但是默认情况下它将使用科学表示法。


如果希望避免这种情况,则需要使用fmt参数指定适当的格式。例如,

import numpy as np

np.savetxt('output.csv', arr, delimiter=',', fmt='%f')