2015-05-29 50 views
56

Come posso prendere più elenchi e inserirli come colonne differenti in un dataframe python? Ho provato a seguire Read lists into columns of pandas DataFrame ma ho avuto qualche problema.Porta più elenchi in dataframe

Tentativo 1:

  • hanno tre liste, e li zip insieme e l'uso che res = zip (LST1, LST2, lst3)
  • rendimenti solo una colonna

Tentativo 2:

percentile_list = pd.DataFrame({'lst1Tite' : [lst1], 
'lst2Tite' : [lst2], 
'lst3Tite':[lst3] 
    }, columns=['lst1Tite','lst1Tite', 'lst1Tite']) 

- produce sia una riga da 3 colonne (come sopra descritto) o se traspongo è 3 righe e 1 colonna

Come ottengo una riga di 100 (lunghezza di ogni elenco indipendente) per 3 colonne (tre elenchi) panda dataframe?

risposta

110

Penso che ci sei quasi, provare a rimuovere le parentesi quadre intorno all'area del LST del (anche non è necessario specificare i nomi delle colonne quando si sta creando un dataframe da un dict come questo):

lst1 = range(100) 
lst2 = range(100) 
lst3 = range(100) 
percentile_list = pd.DataFrame(
    {'lst1Title': lst1, 
    'lst2Title': lst2, 
    'lst3Title': lst3 
    }) 

percentile_list 
    lst1Title lst2Title lst3Title 
0   0   0   0 
1   1   1   1 
2   2   2   2 
3   3   3   3 
4   4   4   4 
5   5   5   5 
6   6   6   6 
... 

Se avete bisogno di una soluzione un po 'più performante è possibile utilizzare np.column_stack piuttosto che zip come nel primo tentativo, questo ha circa un aumento di velocità 2x sull'esempio qui, tuttavia giunge in po' un costo di leggibilità, a mio parere:

percentile_list = pd.DataFrame(np.column_stack([lst1, lst2, lst3]), 
           columns=['lst1Title', 'lst2Title', 'lst3Title']) 
+0

Perfetto! Grazie mille, accetterà quando me lo permetterà! – jfalkson

+1

Io uso molto questa risposta. grazie. –

+0

Questo è perfetto. Grazie –

8

Proprio aggiungendo che con il primo approccio può essere fatto come -

pd.DataFrame(list(map(list, zip(lst1,lst2,lst3)))) 
16

aggiunta alla risposta Aditya Guru s' qui. Non c'è bisogno di usare la mappa. Puoi farlo semplicemente:

pd.DataFrame(list(zip(lst1, lst2, lst3))) 

Questo imposterà il nome della colonna come 0,1,2. Per impostare i propri nomi di colonne, è possibile passare l'argomento parola chiave columns al metodo precedente.

pd.DataFrame(list(zip(lst1, lst2, lst3)), 
       columns=['lst1_title','lst2_title', 'lst3_title']) 
Problemi correlati