使用列名将多个数组保存到 csv 文件

Posted

技术标签:

【中文标题】使用列名将多个数组保存到 csv 文件【英文标题】:Save multiple arrays to a csv file with column names 【发布时间】:2016-02-03 04:48:54 【问题描述】:

虽然看起来很简单,但我在网上找不到任何解决我的问题的方法。基本上,我有两个数组 ab 我想保存到 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何根据列名将数据从 CSV 复制到目标表?

如何使用第一行的列名将 CSV 导入 BigQuery 上的现有表?

按列合并多个 csv 文件的最快方法是啥?

将熊猫数据框保存到csv时如何保留numpy数组

将熊猫数据框保存到csv时如何保留numpy数组

R:按组计算多个相关性(并将输出保存到 csv 文件)