问题描述
我有一个 Pandas 数据框,其中一列的条目是 numpy 数组,长度均为 N。对于某些操作(例如,在平均之前屏蔽某些值),我想将这些值提取到一个数组中,以便我有一个对象形状(len(索引),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)
我认为这是一个 numpy 问题,因为应该有一种方法来重塑这个数组,但我不知道如何解决这个问题。 我当然可以编写一个 for 循环并提取所有单独的子数组,但想知道是否有更优雅的东西可以工作。
编辑:我想对某个键的值集执行掩码操作,即像这样:
import numpy.ma as ma
print ma.masked_equal(f['sth else'].values,1)
这不起作用,大概是因为 f['sth else'].values 的数组结构不适合它。 以下确实有效:
ma.masked_equal(np.array([np.array([ 1., 3., 4.]) ,np.array([ 1., 2., 4.])]),1)
1楼
列出您的列,然后进行转换。
否则,您有一个带有dtype=object
的数组数组,从那里返回有点困难。
np.array(f['sth else'].values.tolist())
array([[1, 3, 4],
[1, 2, 4]])
如果这不起作用,则意味着您有不规则的列表(长度不等),并且 numpy 无法在内存中为您构造连续的整数/浮点数组(因此将回退到较慢的 Python 实现)。