将NumPy数组转储到csv文件中

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

1129684 次浏览

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

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

tofile是一个方便的函数:

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

手册页有一些有用的注释:

这是一个方便的函数,用于快速存储数组数据。 关于endianness和精度的信息丢失,因此此方法不可用 用于归档数据或传输数据的文件的不错选择 在具有不同字节序的机器之间。这些问题中的一些可以 通过将数据输出为文本文件来克服,代价是 速度和文件大小。

注意。此函数不生成多行csv文件,它将所有内容保存到一行。

如果您想将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))

将记录数组写入带有标头的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())

您可以使用pandas。它确实需要一些额外的内存,因此并不总是可能的,但它非常快速且易于使用。

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

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

如果你想写在专栏中:

    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)

您也可以使用纯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)

如前所述,将数组转储到CSV文件中的最佳方法是使用.savetxt(...)方法。但是,我们应该知道某些事情才能正确执行。

例如,如果您有一个dtype = np.int32为的numpy数组

   narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)

并希望使用savetxt保存为

np.savetxt('values.csv', narr, delimiter=",")

它将数据以浮点指数格式存储为

1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00

您必须使用名为fmt的参数更改格式

np.savetxt('values.csv', narr, fmt="%d", delimiter=",")

以原始格式存储数据

以压缩gz格式保存数据

此外,savetxt可用于以.gz压缩格式存储数据,这在通过网络传输数据时可能很有用。

我们只需要更改文件的扩展名,因为.gz和numpy会自动处理一切

np.savetxt('values.gz', narr, fmt="%d", delimiter=",")

希望有帮助

在Python中,我们使用csv.writer()模块将数据写入csv文件。这个模块类似于csv.reader()模块。

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()

分隔符是用于分隔字段的字符串。默认值是逗号(,)。

我相信你也可以很简单地做到这一点:

  1. 将Numpy数组转换为Pandas数据帧
  2. 另存为CSV

例如#1:

    # 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:

    #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

要将NumPy数组存储到文本文件,请从NumPy模块导入savetxt

假设你的Numpy数组名称是train_df

import numpy as np
np.savetxt('train_df.txt', train_df, fmt='%s')

from numpy import savetxt
savetxt('train_df.txt', train_df, fmt='%s')

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


如果您想避免这种情况,那么您需要使用fmt参数指定适当的格式。例如,

import numpy as np


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