【问题标题】:Concatenate arrays of different sizes row-wise using numpy使用 numpy 逐行连接不同大小的数组
【发布时间】:2019-05-24 04:12:42
【问题描述】:

我设法使用 np.concatenate 逐行连接两个大小相同(即列数相同)的 csv 数据集。

combined = np.concatenate((price1,price2))

如何使用 numpy 逐行连接两个不同大小的 csv 数据集(它们包含通用标题,但其中一个数据集有一个附加列)?

dataset1 的标题:a,b,c,d,e,f,g,h,i,k

dataset2 的标题:a,b,c,d,e,f,g,h,i,j(分析不需要的附加列),k

非常感谢。

【问题讨论】:

  • 附加列会发生什么?缺少列的数据集的填充值?还是删除多余的列?
  • 第 j 列对于我后续的分析/matplot 是多余的,因此可以将其删除 @ParitoshSingh
  • 描述您已加载的数组 - shape、dtype 等。在 numpy 中,我们连接数组,而不是 csv 文件。
  • 假设您使用的是np.genfromtxt,您可以使用usecols 参数来加载dataset2 而无需额外的列。
  • 我想出了另一种方法。我创建了 dataset2 的一个子集:dataset2_sub = dataset2[['a','b','c','d','e','f','g','h','i','k']]。然后将np.concatenate 用于dataset1 和dataset2_sub,它们的列数与dataset1 相同。谢谢大家

标签: python numpy join merge concatenation


【解决方案1】:

您可以使用np.delete 删除多余的列,然后使用np.concatenate

headers = list('abcdefghik')
a = np.arange(len(headers)).reshape(1, -1)
#Output: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

headers_2 = list('abcdefghijk')
b = np.arange(len(headers_2)*2).reshape(2,-1)
#Output: array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
#       [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]])

col_to_remove = headers_2.index('j')
np.delete(b, col_to_remove, axis = 1) #note that this does not modify original array, returns a copy.
#Output: array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8, 10],
#       [11, 12, 13, 14, 15, 16, 17, 18, 19, 21]])

result = np.concatenate((a, np.delete(b, col_to_remove, axis = 1)))
#Output: array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
#       [ 0,  1,  2,  3,  4,  5,  6,  7,  8, 10],
#       [11, 12, 13, 14, 15, 16, 17, 18, 19, 21]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2016-04-17
    • 2020-11-21
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多