如何将NumPy数组转储为人类可读格式的csv文件?
当前回答
将记录数组写入带标题的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())
其他回答
numpy。Savetxt将数组保存到文本文件中。
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
如果你想写在列:
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数组存储到文本文件中,请从NumPy模块导入savetxt
假设你的Numpy数组名称是train_df:
import numpy as np
np.savetxt('train_df.txt', train_df, fmt='%s')
OR
from numpy import savetxt
savetxt('train_df.txt', train_df, fmt='%s')
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')
手册页有一些有用的注释:
这是一个方便的函数,用于快速存储数组数据。 关于字节序和精度的信息会丢失,因此此方法不会丢失 对于用于归档数据或传输数据的文件来说,这是一个很好的选择 在具有不同字节序的机器之间。其中一些问题可以 通过将数据输出为文本文件来克服 速度和文件大小。
请注意。此函数不会生成多行csv文件,它将所有内容保存到一行。
如前所述,将数组转储到CSV文件的最佳方法是使用.savetxt(…)方法。然而,有一些事情我们应该知道如何正确地去做。
例如,如果您有一个dtype = np.int32 as的numpy数组
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
并使用savetxt as保存
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 as的参数来更改格式
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
以原始格式存储数据
以压缩的gz格式保存数据
此外,savetxt可以用于存储.gz压缩格式的数据,这在通过网络传输数据时可能很有用。
我们只需要将文件扩展名更改为.gz, numpy就会自动处理所有事情
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
希望能有所帮助
推荐文章
- 把if-elif-else语句放在一行中?
- 我如何结合两个数据框架?
- 如何计数列表中唯一值的出现
- 为什么Pycharm的检查人员抱怨“d ={}”?
- 如何JSON序列化集?
- 如何修剪空白的数组值在php
- 在python中,年龄从出生日期开始
- 使用pip安装SciPy
- 在Python中,我应该如何测试变量是否为None, True或False
- 如何在Python中从毫秒创建datetime ?
- 如何解窝(爆炸)在一个熊猫数据帧列,成多行
- 如何使用pip安装opencv ?
- 在pip冻结命令的输出中“pkg-resources==0.0.0”是什么
- 格式y轴为百分比
- 熊猫连接问题:列重叠但没有指定后缀