从numpy重新排列中选择列

从numpy重新排列中选择列,numpy,pandas,multidimensional-array,dataframe,recarray,Numpy,Pandas,Multidimensional Array,Dataframe,Recarray,我有一个来自类型numpy.core.records.recarray的对象。我想把它有效地用作数据帧。更准确地说,我希望使用其列的子集来获得新的重新排列,就像您使用pandas\u dataframe[[selected\u columns]]一样 实现这一点最简单的方法是什么?不使用pandas,您可以选择结构化数组(recarray)字段的子集。例如: In [338]: dt=np.dtype('i,f,i,f') In [340]: A=np.ones((3,),dtype=dt) I

我有一个来自类型
numpy.core.records
.recarray的对象。我想把它有效地用作数据帧。更准确地说,我希望使用其列的子集来获得新的重新排列,就像您使用
pandas\u dataframe[[selected\u columns]]
一样


实现这一点最简单的方法是什么?

不使用pandas,您可以选择结构化数组(recarray)字段的子集。例如:

In [338]: dt=np.dtype('i,f,i,f')
In [340]: A=np.ones((3,),dtype=dt)
In [341]: A[:]=(1,2,3,4)

In [342]: A
Out[342]: 
array([(1, 2.0, 3, 4.0), (1, 2.0, 3, 4.0), (1, 2.0, 3, 4.0)], 
      dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', '<i4'), ('f3', '<f4')])
油田的结构化子集不是很发达
A[['f0','f1']]
足以查看,但如果您试图修改该子集,它将发出警告或给出错误。这就是我使用
copy
B
的原因

有一组函数可以方便地从重新排列中添加和删除字段。我得查一下访问模式。但大多数情况下,构建一个新的
dtype
和空数组,然后按名称复制字段

import numpy.lib.recfunctions as rf
In [346]: B['f3']=[.1,.2,.3]

In [347]: B
Out[347]: 
array([(2.0, 0.10000000149011612), (2.0, 0.20000000298023224),
       (2.0, 0.30000001192092896)], 
      dtype=[('f1', '<f4'), ('f3', '<f4')])

In [348]: A
Out[348]: 
array([(1, 2.0, 3, 4.0), (1, 2.0, 3, 4.0), (1, 2.0, 3, 4.0)], 
      dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', '<i4'), ('f3', '<f4')])
import numpy.lib.recfunctions as rf