it-swarm.com.de

Nehmen Sie mehrere Listen in Datenrahmen

Wie nehme ich mehrere Listen und füge sie als unterschiedliche Spalten in einen python-Datenrahmen ein? Ich habe versucht diese Lösung aber hatte einige Probleme.

Versuch 1:

  • Habe drei Listen und zippe sie zusammen und benutze diese res = Zip(lst1,lst2,lst3)
  • Ergibt nur eine Spalte

Versuch 2:

percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
                                'lst2Tite' : [lst2],
                                'lst3Tite' : [lst3] }, 
                                columns=['lst1Tite','lst1Tite', 'lst1Tite'])
  • ergibt entweder eine Zeile mal 3 Spalten (so wie oben) oder wenn ich es transponiere sind es 3 Zeilen und 1 Spalte

Wie erhalte ich eine 100-Zeile (Länge jeder unabhängigen Liste) mit 3 Spalten (drei Listen) pandas Datenrahmen?

129
jfalkson

Ich denke, Sie sind fast da, versuchen Sie, die zusätzlichen eckigen Klammern um die lst zu entfernen (Sie müssen auch keine Spaltennamen angeben, wenn Sie einen Datenrahmen aus einem Diktat wie diesem erstellen):

import pandas as pd
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 leistungsfähigere Lösung benötigen, können Sie np.column_stack anstelle von Zip wie beim ersten Versuch verwenden. Dies hat im vorliegenden Beispiel eine etwa zweifache Beschleunigung, ist jedoch mit einem gewissen Preis für die Lesbarkeit verbunden Meinung:

import numpy as np
percentile_list = pd.DataFrame(np.column_stack([lst1, lst2, lst3]), 
                               columns=['lst1Title', 'lst2Title', 'lst3Title'])
231
maxymoo

Hinzufügen zu Aditya Gur 's Antwort hier. Es ist nicht erforderlich, eine Karte zu verwenden. Sie können es einfach tun, indem Sie:

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

Dadurch werden die Spaltennamen auf 0,1,2 gesetzt. Um Ihre eigenen 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'])
38
Abhinav Gupta

Fügen Sie dies mit dem ersten Ansatz wie folgt hinzu:

pd.DataFrame(list(map(list, Zip(lst1,lst2,lst3))))
9
Aditya Guru

Hinzufügen einer weiteren skalierbaren Lösung.

lists = [lst1, lst2, lst3, lst4]
df = pd.concat([pd.Series(x) for x in lists], axis=1)
6
oopsi

Zusätzlich zu den obigen Antworten können wir sie im Handumdrehen erstellen

df= pd.DataFrame()
list1 = list(range(10))
list2 = list(range(10,20))
df['list1'] = list1
df['list2'] = list2
print(df)

ich hoffe es hilft !

3
Vivek Ananthan

@oopsi verwendete pd.concat(), enthielt jedoch keine Spaltennamen. Sie können Folgendes tun, wodurch Sie im Gegensatz zur ersten Lösung in der akzeptierten Antwort die Kontrolle über die Spaltenreihenfolge erhalten (um ungeordnete Dikte zu vermeiden):

import pandas as pd
lst1 = range(100)
lst2 = range(100)
lst3 = range(100)

s1=pd.Series(lst1,name='lst1Title')
s2=pd.Series(lst2,name='lst2Title')
s3=pd.Series(lst3,name='lst3Title')
percentile_list = pd.concat([s1,s3,s3], axis=1)

percentile_list
Out[32]: 
    lst1Title  lst3Title  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
7           7          7          7
8           8          8          8
...
0
dabru