在Python中连接两个数组

时间:2016-09-16 17:09:32

标签: python arrays numpy

我是Python新手。我使用np.lib.recfunctions.join_by来连接两个数组,但结果是错误的。以下是示例和结果:

a = np.array([('a',1),('b',2),('b',2),('c',3)],dtype=[('key','<U1'),('x','<i4')])
b = np.array([('a',-1),('b',-2)],dtype=[('key','<U1'),('y','<i4')])

np.lib.recfunctions.join_by('key', a, b, jointype='outer').data

array([(u'a', 1, -1), (u'b', 2, -2), (u'b', 2, 0), (u'c', 3, 0)], 
      dtype=[])

为什么第二个加入b表示0不是-2

我想要的是

(a,1,-1),(b,2,-2),(b,2,-2),(c,3,0)

怎么做?

由于

1 个答案:

答案 0 :(得分:0)

有一些时间在选项中检查一下。我认为使用'.data'隐藏部分信息以获得回报。请考虑以下

from numpy.lib import recfunctions as rfn

a  # array a and dtype
array([('a', 1), ('b', 2), ('b', 2), ('c', 3)], 
      dtype=[('key', '<U5'), ('x', '<i4')])

a_u  # np.unique(a) and dtype
array([('a', 1), ('b', 2), ('c', 3)], 
      dtype=[('key', '<U5'), ('x', '<i4')])

b  # array b and dtype
array([('a', -1), ('b', -2)], 
      dtype=[('key', '<U5'), ('x', '<i4')])

# join examples

rfn.join_by('key', a, b, jointype='outer')  # join b to a
masked_array(data = [('a', 1, -1) ('b', 2, -2) ('b', 2, --) ('c', 3, --)],
             mask = [(False, False, False) (False, False, False) (False, False, True) (False, False, True)],
       fill_value = ('N/A', 999999, 999999),
            dtype = [('key', '<U5'), ('x1', '<i4'), ('x2', '<i4')])

rfn.join_by('key', a_u, b, jointype='outer')  # join b to a_u
masked_array(data = [('a', 1, -1) ('b', 2, -2) ('c', 3, --)],
             mask = [(False, False, False) (False, False, False) (False, False, True)],
       fill_value = ('N/A', 999999, 999999),
            dtype = [('key', '<U5'), ('x1', '<i4'), ('x2', '<i4')])

rfn.join_by('key', a, b, jointype='inner').data  # join b to a, with data
array([('a', 1, -1), ('b', 2, -2), ('b', 2, 0)], 
      dtype=[('key', '<U5'), ('x1', '<i4'), ('x2', '<i4')])

rfn.join_by('key', a_u, b, jointype='inner').data  # join b to a_u, with data
array([('a', 1, -1), ('b', 2, -2)], 
      dtype=[('key', '<U5'), ('x1', '<i4'), ('x2', '<i4')])

如果跳过.data,则返回更多信息(有用?)。 在您的简单情况下,只需返回数组'a'中的唯一记录即可解决您在解释时遇到的任何问题。

我认为,如果参与此次加入的字段数量有限,您将需要更详细地调查您需要返回的内容。