2016-10-30 7 views
1

Ich habe eine Pandas.core.series.Series in ein Wörterbuch umgewandelt, wobei die Daten die Populationen der Top 3 Landkreise in jedem Staat sind, und es gibt einen lästigen Indexierungsoperator Ich werde nicht los. Das Wörterbuch hat die Form:Python-Liste-innerhalb-Wörterbuch in Wörterbuch konvertieren

{('Alabama', 37): 660367.0, ('Alabama', 45): 353089.0, 
('Alabama', 49): 415395.0, ('Alaska', 71): 298695.0, 
('Alaska', 76): 99631.0, ('Alaska', 85): 101095.0, 
('Arizona', 106): 4167947.0, ('Arizona', 109): 1010025.0, 
('Arizona', 110): 406584.0, ('Arkansas', 118): 249672.0, 
('Arkansas', 174): 392664.0, ('Arkansas', 186): 225477.0, ... 

und ich möchte es konvertieren: {('Alabama', 660367.0), ('Alabama', 353089.0), ... ich wirklich bin neu zu Codierung und der Hoffnung, das ist etwas wirklich einfach zu beheben ist. Ich kann nicht herausfinden, ob es eine bessere Möglichkeit gibt, die Pandas-Serie zu konvertieren, die die zusätzlichen Daten an erster Stelle vermeidet (ich habe einfach data=dict(data) verwendet), oder vielleicht eine for-Schleife durch das Wörterbuch ...?

+1

Teilen Sie den Inhalt Ihres Datenrahmens, indem Sie data.head() einfügen, damit wir die Optionen besser für Sie veranschaulichen können – Boud

Antwort

0

Sie können die Ausgabedaten einfach mit einem Listenverständnis (oder ähnlichem) konvertieren. Wenn Ihre Daten in data ist, wird eine dieser Linien tun, was Sie tatsächlich gefragt, und es hängt von dem Datentyp Sie wollen:

out = [(key[0], value) for key, value in data.items()] 
out = tuple((key[0], value) for key, value in data.items()) 
out = set((key[0], value) for key, value in data.items()) 
# In Python 2.7+ this is the same as the above 
out = {(key[0], value) for key, value in data.items()} 

Aber keiner von ihnen ist ein Wörterbuch im Gegensatz zu dem Original. Das liegt aber daran, dass Sie für jedes Wörterbuch einen eindeutigen Schlüssel für jeden Wert benötigen, der Name des Status jedoch nicht eindeutig ist.

Die Grundidee ist, dass sie über jeden Artikel durchlaufen und von den Staatsnamen zu verwenden (das ist der erste Eintrag in dem Schlüssel ist, damit key[0]) und dann die Bevölkerung, um es hinzuzufügen (nur die value).

Nun ist die eine, die Sie angegeben haben, {('Alabama', 660367.0), ('Alabama', 353089.0), … ist eigentlich eine Menge (zumindest das ist die Darstellung in Python 3, in Python 2 ist dies keine gültige Schreibweise). Sets haben keine Reihenfolge, und jeder Eintrag ist eindeutig. Daher speichert er zwei Landkreise mit derselben Größe im selben Status wie nur ein Eintrag.

Wenn Sie tatsächlich ein Wörterbuch haben möchten, müssen Sie bestimmen, was der Schlüssel sein soll und was der Wert für den Schlüssel sein wird.

0

Es gibt bessere Möglichkeiten, dies zu konvertieren, was Sie aus dem Datenrahmen Objekt wollen, aber für eine quick and dirty fix ...

Wenn Sie wirklich wollen, dass es dies wie: {('Alabama', 660367.0), ('Alabama', 353089.0), ... }

Sie können tun, dies (unter der Annahme python2.7):

(ich werde gehen wir von einer Variable d haben, die das Wörterbuch.)

new_d = {(k[0], v) for k, v in d.iteritems()}

print new_d =>

{('Alabama', 353089.0), ('Alabama', 415395.0), ('Alabama', 660367.0), ('Alaska', 298695.0)} ...

Dies ist eigentlich ein Satz ist.

Verwandte Themen