我一直尝试这样做,到目前为止收效甚微。我在python中有一个大的(> 400,000个数据点)2D数组。根据日期(dd \ mm \ yyyy),数组本身可以分成一系列较小的行。
为了实现我的最终目标,我想要做的一件事就是将一个numpy.ndarray(类似于下面的内容,但显然要大得多)更改为一个键字典(每天一个)月)和相应的数组(由每个特定日子的所有原始数组的数据组成)。
[['16/06/2015 00:00' 'card' 'Smith' 'John' 'Full Time']
['16/06/2015 00:00' 'card' 'Doe' 'Jane' 'Part Time']
['17/07/2015 00:00' 'card' 'Doe' 'Jane' 'Part Time']
['18/06/2015 00:00' 'card' 'Smith' 'John' 'Full Time']
['30/06/2015 00:00' 'card' 'Bob' 'Roberts' 'Full Time']
['30/06/2015 00:00' 'card' 'Smith' 'John' 'Full Time']
['30/06/2015 00:00' 'card' 'Bob' 'Roberts' 'Full Time']]
我不确定如何使上面的数组以与我导入的数据相同的代码格式显示,但正如我所提到的,它应该显示为numpy.ndarray。
我有代码,您可以在下面看到,它返回错误"索引错误:用作索引的数组必须是整数(或布尔)类型",这是一个问题,因为我有数据是由字符串组成的。
Array1 = np.genfromtxt('PATH', delimiter="\t", dtype=(str))
y = {}
for row in Array1:
v = Array1[row[1:]]
k = row[0]
y[k]=v
如果您需要更多信息,请询问,我会尝试提供所需的任何信息。我对这一切都很新手。
答案 0 :(得分:1)
错误消息将指向循环的第一行:正如它所说,这不是您索引数组的方式。 o
已经是行中的值列表;您已经知道如何通过row
获得单个项目,并获得一个完全相同的列表:row[0]
。所以你的代码就是:
row[1:]
请注意,您可以将其简化为
v = row[1:]
实际上整个循环可以作为词典理解来完成:
y[row[0]] = row[1:]
答案 1 :(得分:1)
只需使用csv模块从文件中创建dict来解析它,你需要处理像"16/06/2015 00:00"
这样的重复键,可以使用defaultdict来完成,或者只有最后一个值与键相关联:
import csv
from collections import defaultdict
with open("infile") as f:
d = defaultdict(list)
for row in csv.reader(f, delimiter="\t"):
row[0].extend(row[1:])
创建一个数组只是为了创建一个dict是没有意义的,如果你想要一个dict就像上面那样创建dict。