我有一个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)
答案 0 :(得分:1)
列出您的专栏,然后进行转换。否则,您将拥有一个dtype=object
的数组,很难从那里回来。
np.array(f['sth else'].values.tolist())
array([[1, 3, 4],
[1, 2, 4]])
如果这不起作用,则意味着您的列表参差不齐(长度不等),并且numpy无法为您在内存中构造连续的整数/浮点数组(因此将退回到较慢的python实现)。