2016-07-05 3 views
1

Angenommen, ich habe eine verschachtelte Liste mit ungleicher Anzahl von Elementen in der zweiten Ebene wie a=[[1,2,3],[4,5],[6,7,8,9]]. Ich habe auch eine entsprechende Liste mit Datumsvariablen wie b=[['Mon','Tues','Wed'],['Mon','Wed'],['Mon','Tues','Wed','Thur']]. Ich mochte a und b-pandas dataframes konvertieren, da es in der Lage ist, in ungleichen Reihen zu nehmen, und dann würde ich gerne a und b in eine dataframe und führen merge auf den drei Tage, Spalten kombinieren, um die gemeinsamen Termine zu finden und die entsprechenden Werte . Ich bin mir jedoch nicht sicher, wie ich die geschachtelten Listen in Datenrahmen umwandeln soll. Ich habe versucht, sie in np.array umwandeln, aber es ist nicht möglich, ungleiche Zeilen zu halten.Python verschachtelte Liste mit ungleichen Elementen in der zweiten Schicht in Dataframe konvertieren

+2

Zeigen Sie, was Sie versucht haben. – Merlin

+2

'Datenrahmen, da es ungleiche Reihen aufnehmen kann' Wirklich, seit wann. – Merlin

+0

@ A1122 Ist Ihr Problem, Datenrahmen von einem verschachtelten Diktat zu konstruieren? oder etwas anderes, wenn nur df von verschachtelten dict dann ist es ziemlich einfach. – min2bro

Antwort

1

Best I mit zippen jeden Datensatz in einem Wörterbuch einfiel, eine einzelne Zeile Datenrahmen für diese Zeile dann concat erstellen (oder Outerjoin) dies zu die vorherigen Zeilen. Hier ist der Code:

a = [[1,2,3],[4,5],[6,7,8,9]] 
b = [['Mon','Tues','Wed'],['Mon','Wed'],['Mon','Tues','Wed','Thur']] 
df = pd.DataFrame() 

for row in zip(a,b): 
    d = dict(zip(row[1], row[0])) 
    dfrow = pd.DataFrame(d, index=[0]) #Dataframe for 1 row 
    df = pd.concat([df, dfrow]) 

Gibt das:

Mon Thur Tues Wed 
0 1 NaN 2.0 3 
0 4 NaN NaN 5 
0 6 9.0 7.0 8 
0

Ich denke, so etwas wie dieses [dict(zip(keysA,keysB)) for keysA,keysB in zip(a,b)] ... aber es hat nichts mit Pandas oder numpy zu tun ...

>>> a=[[1,2,3],[4,5],[6,7,8,9]] 
>>> b=[['Mon','Tues','Wed'],['Mon','Wed'],['Mon','Tues','Wed','Thur']] 
>>> print [dict(zip(keysA,keysB)) for keysA,keysB in zip(a,b)] 
[{1: 'Mon', 2: 'Tues', 3: 'Wed'}, {4: 'Mon', 5: 'Wed'}, {8: 'Wed', 9: 'Thur', 6: 'Mon', 7: 'Tues'}] 

oder vielleicht möchten Sie Tag Name der Taste anstelle der Nummer wechseln .. . es ist nicht wirklich klar, aus Ihrer Frage ...

(so etwas wie df = DataFrame([dict(zip(keysB,keysA)) for keysA,keysB in zip(a,b)]))