2013-07-10 56 views
3

我有一个从csv(np.recfromcsv)导入的大数组,我想通过数组中的ID列分割成更小的数组。 例如我的阵列(A)是这样的:按列中的唯一值拆分numpy数组

[(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,等)的阵列。我一直试图找到一种方法来使用numpy的vsplit方法,使用我生成的唯一ID值列表(id_list = list(set(a['id']))),但是我得到的错误:ValueError:vsplit只适用于2维或更多维数组。这使我认为np.recfromcsv工具不能正确生成尺寸。我应该使用不同的导入工具吗?
我自己也尝试在一个简单的循环这样做:

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

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

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

回答

0

读出来自recarray列你不及格的指数,但该名称,例如:

my_col = a['id'] 

这样你的命令是:

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

的,正如观察。 recfromcsv()正常工作。结构化数组(或记录数组)中的每个字段的作用类似于1D-array。也许你可以尝试使用np.loadtxt()通过delimiter=',',这将返回2D-array

+0

我使用np.loadtxt()获得了相同的ValueError,并且test.shape显示它仍然是一维数组:(1890,) – AlmaThom

+0

您可以使它在Web中的某处位于输入文件的示例中...似乎有什么不对... –

+0

我已经删除了这个任务的一些多余的列,并把它放在这里:http://www.filedropper.com/samplea – AlmaThom