列的numpy和应用方法

时间:2018-10-12 18:13:33

标签: python arrays pandas numpy

我有一个包含对象的numpy数组。

例如,我的数组是:

a = np.array({'a':1,'b':2},....,{'a':n,'b':n+1})

数据不是那么重要,但是我需要为每个列调用该对象上的属性。

以我的词典示例为例,我想调用keys()以在该行上打印出键列表并以numpy数组形式返回:

a[0].keys()

如果我使用的是Pandas,则可以在列上利用apply()并使用lambda函数来执行此操作。对于这种情况,我不能使用Pandas,那么如何在单个numpy数组列上执行相同的操作?

我尝试使用apply_along_axis,但是lambda整体上一次通过arr而不是一次,所以我基本上需要在lambda内使用for循环来获取我的方法。

np.apply_along_axis(lambda b: b.keys(), axis=0, arr=self.data)

上面的代码不起作用! (我知道)。

是否可以使用numpy数组进行pandas.apply()

在这种情况下,所需的结果将是N行numpy数组,其中包含[a,b]的列表。

1 个答案:

答案 0 :(得分:1)

可以将这样的对象数组视为列表:

In [110]: n=2;a = np.array(({'a':1,'b':2},{'a':n,'b':n+1}))
In [111]: a
Out[111]: array([{'a': 1, 'b': 2}, {'a': 2, 'b': 3}], dtype=object)
In [112]: [d.keys() for d in a]
Out[112]: [dict_keys(['a', 'b']), dict_keys(['a', 'b'])]

您还可以使用frompyfunc将函数应用于数组的所有元素(或多个数组的广播元素)

In [114]: np.frompyfunc(lambda d:d.keys(),1,1)(a)
Out[114]: array([dict_keys(['a', 'b']), dict_keys(['a', 'b'])], dtype=object)

它返回一个对象数组,在这种情况下可以。 np.vectorize也使用此功能,但使用一个otypes参数。

通常,在对象dtype数组上进行迭代比在数字数组上进行迭代要快(因为它要做的只是返回一个指针),但比列表上的等效迭代要慢。对象dtype数组的计算不如编译的数值数组计算快。