从numpy recarray中选择列

时间:2016-06-09 21:07:58

标签: numpy pandas multidimensional-array dataframe recarray

我有一个numpy.core.records类型的对象.recarray。我想将它有效地用作pandas数据帧。更确切地说,我想使用其列的子集来获得新的重新排列,就像执行pandas_dataframe[[selected_columns]]一样。

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

1 个答案:

答案 0 :(得分:1)

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

  - name: Get Gem List
    shell: gem list | awk '{print $1}'
    register: gem_list

  - name: Install jekyll jekyll
    shell: gem install jekyll
    when: "'jekyll' not in gem_list.stdout_lines"

字段的子集。

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一起使用的原因。

有一组功能可以帮助添加和删除重新排列的字段。我必须查找访问模式。但主要是构造一个新的B和空数组,然后按名称复制字段。

dtype