如何将NumPy数组转储为人类可读格式的csv文件?
当前回答
NumPy .savetxt()方法用于将NumPy数组保存到输出文本文件中,但是默认情况下它将使用科学表示法。
如果希望避免这种情况,则需要使用fmt参数指定适当的格式。例如,
import numpy as np
np.savetxt('output.csv', arr, delimiter=',', fmt='%f')
其他回答
如前所述,将数组转储到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=",")
希望能有所帮助
如果你想写在列:
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')
你可以用熊猫。它确实需要一些额外的内存,所以它并不总是可行的,但它非常快速和易于使用。
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())
推荐文章
- 把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轴为百分比
- 熊猫连接问题:列重叠但没有指定后缀