将CSV文件导入numpy作为数据表导致形状不正确

时间:2014-07-28 16:23:34

标签: python csv numpy

我尝试使用numpy将CSV文件作为数据表读取,但遇到了问题。

这是我的CSV文件,完整版:

week,count,is_successful,percent,percent_tablet,percent_desktop
1,2005,0,23,32,45
1,3805,1,18,22,55
2,1872,0,35,22,43
2,2990,1,22,21,57
3,2005,0,24,24,48
3,3805,1,27,21,52

这是我的numpy代码:

data = np.genfromtxt("data.csv", delimiter=',', names=True)
print data.shape

这给了我(6,) - 它看到行但没有列。为什么不将它作为表格导入?

3 个答案:

答案 0 :(得分:2)

当您命名列时,genfromtxt创建的数组是一维structured array。使用列名作为键访问列,例如data['week']

您可以使用view方法获取数据的二维视图:table = data.view(np.float64).reshape(len(data), -1)

答案 1 :(得分:0)

来自documentation

  

控制我们读取的字符串序列的主要方法   将文件转换为其他类型是设置dtype参数。   此参数的可接受值为:

     
      
  • 单个类型,例如dtype = float。输出将是具有给定dtype的2D,除非已将每个列与名称相关联   使用names参数(见下文)。请注意,dtype = float是
      genfromtxt的默认值。

  •   
  • 一系列类型,例如dtype =(int,float,float)。

  •   
  • 以逗号分隔的字符串,例如dtype =“i4,f8,| S3”。

  •   
  • 一个包含两个键“名称”和“格式”的词典。

  •   
  • 一系列元组(名称,类型),例如dtype = [('A',int),('B',float)]。

  •   
  • 现有的numpy.dtype对象。

  •   
  • 特殊值无。在这种情况下,列的类型将根据数据本身确定(见下文)。

  •   
     

在所有情况下,但第一个,输出将是具有结构化dtype的一维数组。此dtype具有与序列中的项目一样多的字段。字段名称使用names关键字定义。

基本上,如果数据是异构的或未指定的,则会得到一个dtypes数组。只有它是同质的才能得到矩阵。

答案 2 :(得分:0)

您可以使用skiprows并将names保留为其默认False值。这会绕过将数据汇集到结构中。

data = np.genfromtxt("data.csv", delimiter=',', skiprows=1)
print data.shape