2017-01-26 6 views
3

Ich habe eine Liste von Listen in Python. Ich versuche, es in einen Datenrahmen umzuwandeln. Für zB =Python Liste von Listen zu Dataframe - AssertionError

foo = [ 
    [1,2,3...], 
    [a,b,c...], 
    [aa,bb,cc...] 
] 

Jede dieser 3 Listen enthält 100 Elemente. Ich habe das versucht, folgendes zu einem Datenrahmen zu konvertieren -

df = pandas.DataFrame(foo, columns=headers) // where headers is ['id', 'fname', 'lname'] 
df = pandas.DataFrame(foo, columns=[foo[0], foo[1], foo[2]]) 

Jedoch bin ich diesen Fehler -

AssertionError: 3 columns passed, passed data had 100 columns 
+0

Dieser Fehler scheint ziemlich klar geschnitten, nein? Sie übergeben nur 3 Spaltennamen, aber es gibt 100 Spalten in den Daten. –

+0

@ juanpa.arrivillaga - Ja, ich verstehe den Fehler. Ich bin einfach nicht in der Lage, einen Weg zu finden, diese Einstellung in einen DF umzuwandeln – newbie

Antwort

6

Sie können die folgenden Methoden versuchen. Der Fehler rührt von der Tatsache her, dass jede Unterliste als eine Zeile interpretiert wird, wenn der Konstruktor pandas.DataFrame verwendet wird. Sie können entweder ein Wörterbuch machen die Header aus und die Liste:

import pandas as pd 
headers = ['id', 'fname', 'name'] 
df = pd.DataFrame(dict(zip(headers, foo))) 

df 
#fname id lname 
#0 a 1  aa 
#1 b 2  bb 
#2 c 3  cc 
#3 d 4  dd 
#4 e 5  ee 

Oder die Liste transponieren:

df = pd.DataFrame(list(zip(*foo)), columns=headers) 

df 
# id fname lname 
#0 1  a  aa 
#1 2  b  bb 
#2 3  c  cc 
#3 4  d  dd 
#4 5  e  ee 
1

Sie auch DataFrame.from_records zur Umsetzung der Datenrahmen versuchen:

In [17]: df = pd.DataFrame.from_records(foo).T 

In [18]: df 
Out[18]: 
    0 1 2 
0 1 a aa 
1 2 b bb 
2 3 c cc 

In [19]: df.columns = ['id', 'fname', 'lname'] 

In [20]: df 
Out[20]: 
    id fname lname 
0 1  a aa 
1 2  b bb 
2 3  c cc 
Verwandte Themen