2017-12-21 5 views
2

Ich versuche herauszufinden, wie man ein Dataset erstellt, wobei die erste Spalte aus der 'ID' des Wörterbuchs und der zweiten Spalte des Wertes aus der Liste des Wörterbuchs besteht, so dass ich dieses mit Seabohnen darstellen kann.So erstellen Sie ein Dataset mit nur zwei Spalten ausgehend von einem Wörterbuch mit einer ID und einer Liste von Werten.

di = {'a' : [1,4,5], 'b' : [1,8],'c' : [56,100,5,568],'d' : [20,10,2],'e' : [1000,3,675]} 

ich so ungefähr wie dies wünschen würde:

ID  Value 
a  1 
a  4 
a  5 
b  1 
b  8 
c  56 
c  100 

und so weiter .. meine ID und mein Wert trennt Vorerst nur dieses Stück Code, den ich habe, aber mein Wert hält nach wie vor als eine Liste und nicht wie das oben angegebene Beispiel für das Ergebnis, nach dem ich suche.

serie = pd.Series(di) 
df = pd.DataFrame({'ID':serie.index, 'Value':serie.values}) 

Hilfe wäre sehr willkommen. Vielen Dank im Voraus!

+0

Danke! Dies löst zwar mein Problem mit dem Datenrahmen, lässt mich aber trotzdem nicht mit Seaborn plotten Ich benutzte den Befehl: sns.swarmplot (x = "ID", y = "Wert", data = lol) für Das aber das gibt mir nur einen Fehler. Vielen Dank für Ihre Hilfe! –

+0

Das hat es tatsächlich komplett gelöst! Vielen Dank Alter! Ich würde dir eine positive Bewertung geben, aber ich habe nicht genug Reputation. Wenn ich das tue, werde ich auf diese Frage zurückkommen, um dir die Aufwertung zu geben! Danke nochmal mann !! –

+0

Bitte zögern Sie nicht, die bereitgestellte Antwort zu akzeptieren. – Abdou

Antwort

0

Sie können entweder strukturieren das Wörterbuch in eine Datensätze artigen Liste (im Grunde eine Liste von Listen) an die pd.DataFrame.from_records Funktion zu übergeben:

lol = [list(zip([x]*len(y), y)) for x, y in di.items()] 
df = pd.DataFrame.from_records([x for y in lol for x in y], columns=['ID', 'Value']) 
sns.swarmplot(x="ID", y="Value", data=df) 

Oder Sie pd.Series und auszupacken die Listen in den Zeilen verwenden können mit folgenden:

df = pd.Series(di).apply(pd.Series).stack() 
df = df.reset_index(level=0).‌​rename(columns=lambd‌​a x: 'ID' if x else 'Value') 
sns.swarmplot(x="ID", y="Value", data=df) 

Entweder sollten Sie bekommen, was Sie brauchen.

Verwandte Themen