在列表的列上调用.values将返回一个对象数组

时间:2018-09-23 23:31:58

标签: python pandas numpy

我有一个pandas数据帧,其中一列的条目是numpy数组,长度均为N。对于某些操作(例如,在求平均值之前屏蔽某些值),我想将这些值提取到数组中,以便具有形状的对象(len(indices),N)。

但是,当我查看.values对象时,它的形状为(len(indices),),然后它的第一个元素的长度为N。

f = pd.DataFrame([[1,np.array([1,3,4])],[2,np.array([1,2,4])]], index=[2,5], columns=['sth','sth else'])
print np.shape(f['sth else'].values)

我认为这是一个麻木的问题,因为应该有一种方法可以重塑此数组,但是我不知道该如何解决。我当然可以编写一个for循环并提取所有单独的子数组,但我想知道是否还有更优雅的方法可以工作。

编辑: 我想对某个键的值集执行掩码操作,即类似这样的内容:

import numpy.ma as ma
print ma.masked_equal(f['sth else'].values,1)

无效,大概是因为f ['thth else']。values的数组结构对此没有帮助。确实可以执行以下操作:

ma.masked_equal(np.array([np.array([ 1.,  3.,  4.]) ,np.array([ 1.,  2.,  4.])]),1)

1 个答案:

答案 0 :(得分:1)

列出您的专栏,然后进行转换。否则,您将拥有一个dtype=object的数组,很难从那里回来。

np.array(f['sth else'].values.tolist())

array([[1, 3, 4],
       [1, 2, 4]])

如果这不起作用,则意味着您的列表参差不齐(长度不等),并且numpy无法为您在内存中构造连续的整数/浮点数组(因此将退回到较慢的python实现)。