当前位置: 代码迷 >> python >> 对一列列表调用 .values 返回一个对象数组
  详细解决方案

对一列列表调用 .values 返回一个对象数组

热度:73   发布时间:2023-06-27 21:58:40.0

我有一个 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)

列出您的列,然后进行转换。 否则,您有一个带有dtype=object的数组数组,从那里返回有点困难。

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

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

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

  相关解决方案