2012-08-04 13 views
17

Ho un oggetto dataframe panda che assomiglia a questo:Come generare un elenco da un DataFrame panda con il nome della colonna e i valori delle colonne?

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

mi piacerebbe per generare una lista di liste oggetti in cui il primo elemento è l'etichetta di colonna ed i valori della lista rimanenti sono i valori di dati di colonna:

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

Come posso fare questo? Grazie per l'aiuto.

risposta

34

Il modo più semplice è probabilmente list(dt.T.itertuples()) (dove dt è il tuo dataframe). Questo genera un elenco di tuple.

+0

Grazie! Non sapevo di itertuples(). – turtle

+1

Inoltre, non mi ero reso conto che esistevano le terzine ... - elegante +1 –

+3

Crea una lista di tuple ma non un elenco di liste – Joop

3

Il mio approccio ingenuo sarebbe utilizzare iteritems con 'll' come un elenco di liste e l come una singola lista.

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 La risposta sopra restituisce un elenco di tuple non un elenco di elenco come richiesto in questione. Avevo bisogno in particolare di un elenco di liste per poter scrivere il dataframe in spreadsheed usando DataNitro. Adattato l'esempio precedente con la lista di comprensione:

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

Questo produce il risultato in base alle esigenze

5

A rigor di termini, se si desidera liste annidate (e non una lista di tuple) che si può fare

df.values.tolist() 

come df.values ​​è una matrice numpy. Che vi darà una lista di liste come richiesto:

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

vecchia questione lo so, ma questo rende più senso per me che queste altre risposte.

Se questa è la tua dataframe:

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

fare questo:

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

Risultato

[['one', 1, 1], ['two', 2, 1], ['three', 3, 1], ['four', 4, 1], ['five', 5, 1]] 
Problemi correlati