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

标签 python arrays python-2.7 numpy split

我有一个从 csv (np.recfromcsv) 导入的大型数组,我想通过所述数组中的 ID 列将其分成较小的数组。 例如我的 array(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 方法的方法,但是我得到了错误:ValueError: vsplit only works on arrays of 2 or more dimensions。这让我觉得 np.recfromcsv 工具没有正确生成维度。我应该使用不同的导入工具吗?
我也试过在一个简单的循环中这样做:

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

但这会产生一个错误:SyntaxError: can't assign to operator。我知道问题出在动态变量上,但我看不出有其他方法可以在不覆盖每个 ID 的数组的情况下实现这一点。

我非常感谢有关如何解决这个问题的建议。

最佳答案

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

my_col = a['id']

这样你的命令将是:

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

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

关于python - 按列中的唯一值拆分 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577044/

相关文章:

python 2.7 vs 3编码解码字节字符串

Python 操作系统错误 : [Errno 2] No such file or directory

javascript - 在 Javascript 中按日期对数组数组进行排序

python - pip install 在写入 installed-files.txt 时遗漏了一些生成的文件

python - 从 DataFrame 中选择属于同一系列的行的最后一次观察

python - 无法在 Kivy 中设置布局大小

c - C 中函数参数/调用函数的问题

python : Appending Integer array in list while iterating

Python 反转元组的某些部分

matlab - 从 Matlab 文件导入时为 "LapackError: Parameter a has non-native byte order in lapack_lite.dgesdd"