按列中的唯一值拆分numpy数组

时间:2013-07-10 17:24:08

标签: python arrays python-2.7 numpy split

我有一个从csv(np.recfromcsv)导入的大型数组,我希望通过所述数组中的ID列将其分成更小的数组。 例如,我的数组(a)看起来像:

[(842, 129826, 2018, 7246, '1/4/2009', 452, '1/4/2009', 452, '1/4/2009')
 (863, 129827, 2018, 7246, '1/7/2009', 452, '1/7/2009', 452, '1/7/2009')
 (890, 129828, 2019, 7246, '1/11/2009', 452, '1/11/2009', 452, '1/11/2009')
 ...,
 (339, 131268, 1085, 4211, '12/1/2009', 220, '12/2/2009', 220, '12/1/2009')
 (376, 131535, 1085, 4211, '12/8/2009', 220, '12/9/2009', 220, '12/8/2009')
 (470, 131536, 1087, 4211, '12/28/2009', 220, '12/29/2009', 220, '12/28/2009')]

我想根据第三列(2018年,2019年,1085年等)将其拆分为数组。我一直在尝试使用我生成的唯一ID值(id_list = list(set(a['id'])))的列表来找到使用numpy的vsplit方法的方法,但是我得到了erorr: ValueError:vsplit仅适用于2或2的数组更多尺寸。这让我觉得np.recfromcsv工具无法正确生成维度。我应该使用其他导入工具吗? 我也尝试过一个简单的循环:

for e in id_list:
    name = "id" + str(e)
    name = a[a['id']==e]

但这会产生错误: SyntaxError:无法分配给运算符。我知道问题是动态变量,但我认为没有其他方法可以实现这一点而不会覆盖每个ID的数组。

我真的很感激如何解决这个问题的建议。

1 个答案:

答案 0 :(得分:0)

要从重新排列中读取列,您不会传递索引,而是传递名称,例如:

my_col = a['id']

这样你的命令就是:

id_list = list(set(a['id'])))

就像观察一样。 recfromcsv()正常运行。结构化数组(或记录数组)中的每个字段都像1D-array一样工作。也许您可以尝试使用np.loadtxt()传递delimiter=',',这将返回2D-array