使用列名将多个数组保存到 csv 文件
Posted
技术标签:
【中文标题】使用列名将多个数组保存到 csv 文件【英文标题】:Save multiple arrays to a csv file with column names 【发布时间】:2016-02-03 04:48:54 【问题描述】:虽然看起来很简单,但我在网上找不到任何解决我的问题的方法。基本上,我有两个数组 a
和 b
我想保存到 csv 文件中。这将是两列。我也想添加列名。下面的代码我用来将数组转储到 csv。
from np import array, savetxt
a = array([1,2,3,4])
b = array([5,6,7,8])
savetxt('submission2.csv', zip(a,b), delimiter=',', fmt='%f')
如何添加列名?我希望 csv 文件看起来像
Name1 Name2
1 5
2 6
3 7
4 8
奇怪的是,savetxt
函数中没有这个选项。 header
选项确实做到了,因为它只是将评论粘贴到第一个单元格中。谢谢。
编辑:数组
【问题讨论】:
第一行是放置列名的位置;你想要行名吗?您能否举例说明您希望文件的外观? @BurhanKhalid 添加了详细信息 【参考方案1】:我找到了将多个 numpy 一维数组保存为列的解决方案:
import numpy as np
data = []
for i in single_np_arrays:
data.append(i)
data = np.array(data).T #transpose the array to have proper columns
np.savetxt('columns_from_np_arrays.csv',data,delimiter=',')
【讨论】:
【参考方案2】:注意savetxt
(和loadtxt
)也使用文件句柄。
因此,如果您想要更高级的标题,您可以这样做:
a = array([1,2,3,4])
b = array([5,6,7,8])
with open('submission2.csv','w') as f:
f.write('# This is a very complex header\n')
f.write('A,B\n')
savetxt(f, zip(a,b), delimiter=',', fmt='%f')
或者,如前所述,使用header=str(...)
参数。
【讨论】:
我认为你的意思是 np.array(list(zip(a,b)))【参考方案3】:使用header
选项,如下所示:
>>> import numpy
>>> a = numpy.array([[1,2],[3,4],[5,6]])
>>> numpy.savetxt("foo.csv", a, delimiter=',', header="A,B", comments="")
生成的文件如下所示:
A,B
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
【讨论】:
有没有办法将列添加到现有的 csv 文件中?另外,我怎样才能摆脱e? @duldi 您可以使用fmt
kwarg 更改格式。默认值为 %.18e
,其中包括 e。根据您的需要尝试%f
或%g
【参考方案4】:
您可以使用pandas 包轻松做到这一点:
import pandas as pd
import numpy as np
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
df = pd.DataFrame("name1" : a, "name2" : b)
df.to_csv("submission2.csv", index=False)
【讨论】:
【参考方案5】:你可以这样做:
import np import array, savetxt
a = array([1,2,3,4])
b = array([5,6,7,8])
f = open("submission2.csv", "w")
f.write(",\n".format("Name1", "Name2"))
for x in zip(a, b):
f.write(",\n".format(x[0], x[1]))
f.close()
【讨论】:
以上是关于使用列名将多个数组保存到 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章