2015-05-29 11 views
56

Wie nehme ich mehrere Listen und legen Sie sie als verschiedene Spalten in einem Python-Datenframe? Ich habe versucht, Read lists into columns of pandas DataFrame zu folgen, hatte aber einige Probleme.Nehmen Sie mehrere Listen in Dataframe

Versuch 1:

  • haben drei Listen und zip sie zusammen und verwenden, die res = zip (lst1, lst2, LST3)
  • Ausbeuten nur eine Spalte

Versuch 2:

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

- ergibt entweder eine Reihe von 3 Spalten (der Weg, oben) oder wenn ich transponieren 3 Zeilen und 1 Spalte

Wie bekomme ich eine 100 Zeile (Länge jeder unabhängigen Liste) um 3 Spalten (drei Listen) Pandas Dataframe?

Antwort

110

Ich glaube, Sie sind fast da, versuchen die zusätzlichen eckigen Klammern um die LSTs entfernen (auch brauchen Sie nicht die Spaltennamen angeben, wenn Sie einen Datenrahmen von einem dict wie das hier zu schaffen):

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 
... 

Wenn Sie eine etwas leistungsfähigere Lösung benötigen, können Sie np.column_stack verwenden, anstatt zip wie in Ihrem ersten Versuch, hat diese um einen 2x Speedup am Beispiel hier, kommt jedoch zu wenig Kosten von Lesbarkeit meiner Meinung nach:

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

Perfekt! Vielen Dank, wird akzeptieren, wenn es mich lässt! – jfalkson

+1

Ich benutze diese Antwort sehr. Danke. –

+0

Das ist perfekt. Vielen Dank –

8

Nur fügen hinzu, dass der ersten Ansatz kann es als getan werden - hier

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

zu Aditya Guru ‚s Antwort Hinzufügen. Es besteht keine Notwendigkeit, eine Karte zu verwenden. Sie können es einfach tun durch:

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

Dies wird die Spaltennamen als 0,1,2. Um eigene Spaltennamen festzulegen, können Sie das Schlüsselwortargument columns an die obige Methode übergeben.

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