2012-08-04 14 views
17

que tienen un objeto de trama de datos pandas que tiene este aspecto:¿Cómo generar una lista de un DataFrame de pandas con el nombre de columna y los valores de columna?

one two three four five 
0 1 2  3  4  5 
1 1 1  1  1  1 

me gustaría generar una lista de listas de objetos en el que el primer elemento es la etiqueta de la columna y los valores de las listas restantes son los valores de los datos de la columna:

nested_list = [['one', 1, 1] 
       ['two', 2, 1] 
       ['three', 3, 1] 
       ['four', 4, 1] 
       ['five', 5, 1]] 

¿Cómo puedo hacer esto? Gracias por la ayuda.

Respuesta

34

La manera más simple es probablemente list(dt.T.itertuples()) (donde dt es su marco de datos). Esto genera una lista de tuplas.

+0

Gracias! No sabía sobre itertuples(). – turtle

+1

Tampoco me di cuenta que itertuples estaba allí ... - elegant +1 –

+3

Crea una lista de tuplas aunque no lista de listas – Joop

3

Mi enfoque ingenuo sería utilizar iteritems con 'll' como una lista de listas yl como una lista única.

df = DataFrame({'one':[1,1], 'two':[2,1], 'three':[3,1], 'four':[3,1] }) 

ll = [] 

for idx,row in df.iteritems(): 
    l = row.values.tolist() 
    l.insert(0,idx) 
    ll.append(l) 
9

@BrenBarn responder anterior produce una lista de tuplas no una lista de lista como pedido en cuestión. Necesité específicamente una lista de listas para poder escribir el marco de datos en spreadsheed usando DataNitro. Adaptado del ejemplo anterior con la lista de comprensión:

[list(x) for x in dt.T.itertuples()] 

Esto produce el resultado que necesitaba

5

Estrictamente hablando si quieres listas anidadas (y no una lista de tuplas) que puede hacer

df.values.tolist() 

como df.values ​​es una matriz numpy. Eso le dará una lista de listas conforme a lo solicitado:

[[0.0001313652121930252, 3.5915356549999985e-05], 
[3.5915356549999985e-05, 0.00011634321240684215]] 
0

vieja pregunta lo sé, pero esto tiene más sentido para mí que estas otras respuestas.

Si esta es su trama de datos:

df = pd.DataFrame({'one': [1, 1], 'three': [3, 1], 'four': [4, 1], 
      'five': [5, 1], 'two': [2, 1]}, 
      columns=['one', 'two', 'three', 'four', 'five']) 

hacer esto:

df.T.reset_index().values.tolist() 

Resultado

[['one', 1, 1], ['two', 2, 1], ['three', 3, 1], ['four', 4, 1], ['five', 5, 1]] 
Cuestiones relacionadas