我尝试使用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,)
- 它看到行但没有列。为什么不将它作为表格导入?
答案 0 :(得分:2)
当您命名列时,genfromtxt
创建的数组是一维structured array。使用列名作为键访问列,例如data['week']
。
您可以使用view
方法获取数据的二维视图:table = data.view(np.float64).reshape(len(data), -1)
。
答案 1 :(得分:0)
控制我们读取的字符串序列的主要方法 将文件转换为其他类型是设置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