我有一个numpy.core.records
.recarray 类型的对象。我想有效地将它用作熊猫数据框。更准确地说,我想使用它的列的一个子集来获得一个新的recarray,就像你做的一样pandas_dataframe[[selected_columns]]
。
实现这一目标的最简单方法是什么?
我有一个numpy.core.records
.recarray 类型的对象。我想有效地将它用作熊猫数据框。更准确地说,我想使用它的列的一个子集来获得一个新的recarray,就像你做的一样pandas_dataframe[[selected_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')])
字段的子集。
In [343]: B=A[['f1','f3']].copy()
In [344]: B
Out[344]:
array([(2.0, 4.0), (2.0, 4.0), (2.0, 4.0)],
dtype=[('f1', '<f4'), ('f3', '<f4')])
可以独立修改A
:
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')])
字段的结构化子集不高度发达。 A[['f0','f1']]
足以查看,但如果您尝试修改该子集,它会发出警告或出错。这就是我使用copy
with的原因B
。
有一组函数可以帮助在重新数组中添加和删除字段。我将不得不查找访问模式。但主要是构造一个新的dtype
空数组,然后按名称复制字段。
import numpy.lib.recfunctions as rf