将CSV文件读取为numpy数组,将第一行读取为字符串,将其作为float

时间:2012-09-09 03:11:20

标签: python csv numpy

我将数据存储在CSV中,其中第一行是字符串(列名称),其余行是数字。如何将其存储到numpy数组?我能找到的只是如何为列设置数据类型而不是为行设置数据类型。

现在我只是跳过标题进行计算,但我需要在最终版本中使用标题。但是,如果我将标题留在其中,则将整个数组设置为字符串,并且计算失败。

这就是我所拥有的:

 data = np.genfromtxt(path_to_csv, dtype=None, delimiter=',', skip_header=1) 

3 个答案:

答案 0 :(得分:40)

如果在函数names=True

中使用np.genfromtxt参数,则可以保留列名称
 data = np.genfromtxt(path_to_csv, dtype=float, delimiter=',', names=True) 

请注意dtype=float,它会将您的数据转换为浮点数。这比使用dtype=None更有效,它要求np.genfromtxt为您猜测数据类型。

输出将是结构化数组,您可以在其中按名称访问各列。名称将从您的第一行中获取。可能会发生一些修改,例如,列名称中的空格将更改为_documentation应涵盖您可能遇到的大多数问题。

答案 1 :(得分:12)

当你说你需要最终版本中的标题时,我不确定你是什么意思,但你可以生成一个结构化数组,其中的列可以通过这样的字符串访问:

data = np.genfromtxt(path_to_csv, dtype=None, delimiter=',', names=True)

然后使用data['col1_name']data['col2_name']等访问列

答案 2 :(得分:2)

numpy数组的整个想法是所有元素都是相同的类型。将标题读入Python列表并与数字分开管理。您还可以创建结构化数组(记录数组),在这种情况下,您可以使用标题来命名记录中的字段。在这种情况下,将它们存储在数组中将是多余的。