将Numpy结构化数组转换为Pandas数据帧

时间:2018-07-23 19:03:45

标签: python python-3.x pandas numpy

我从以下代码获取结构化的numpy数组:

data = np.genfromtxt(fname, dtype = None, comments = '#', skip_header=1, usecols=(ucols))

其中第一列是按乱序排列(我希望保留)的其余数据集的索引。 我想将结构化数组转换为Pandas数据框,并将加扰的索引作为数据框的可调用索引。

编辑:

import numpy as np

test = np.array([(45,1,'mars',1,1),(67,1,'pluto',1,1),(12,1,'saturn',1,1)],dtype='i,f,U10,i,f')

创建一个numpy结构化数组,调用第一个条目将给出:

In [5]: test[0]
Out[5]: (45, 1., 'mars', 1, 1.)

调用整个数组:

In [6]: test
Out[6]: 
array([(45, 1., 'mars', 1, 1.), (67, 1., 'pluto', 1, 1.),
       (12, 1., 'saturn', 1, 1.)],
      dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', '<U10'), ('f3', '<i4'), ('f4', '<f4')])

我想将此结构化数组转换为pandas数据框,然后在此示例中,将45,67,12设为可访问索引,以访问数组“行”中的数据。

2 个答案:

答案 0 :(得分:1)

如果我对问题的理解正确,那么您成功发布的摘录会创建一个Pandas数据框,并且您要更改结果数据框的索引。您可以更改现有数据的索引数据框及其 .set_index() 方法,向其传递要用作其索引的列的标签。

例如,如果包含所需索引的列称为“加扰”,则应达到以下目的:

data.set_index('scramble')

注意:默认情况下,这将返回带有更新索引的数据框。要改为更改原始数据帧data,可以在对方法的调用中使用inplace=True选项。例如:

data.set_index('scramble', inplace=True)

答案 1 :(得分:1)

通过给定的示例,您可以让

    create or replace view puntiPerCorso (Categoria,corsoDistudi,puntiTotali) as
    select TabellaScore.categoria,TabellaScore.corsostudi, sum(tabellascore.punti) From TabellaScore
    group by TabellaScore.categoria,TabellaScore.corsostudi;





    create or replace view BestCorso (Categoria,corsoDistudi) as
    select puntipercorso.categoria,puntipercorso.corsodistudi From     puntipercorso
    where puntipercorso.puntitotali = (select       max(puntipercorso.puntitotali) from puntipercorso p where 
            p.categoria = puntipercorso.categoria)
    group by puntipercorso.categoria,puntipercorso.corsodistudi;

这样,您可以通过df = pd.DataFrame(test).set_index('f0') 访问索引为45的行。