Python Pandas-Datenrahmenspalten werden in Diktatschlüssel und -wert konvertiert

90

Ich habe einen Pandas-Datenrahmen mit mehreren Spalten und möchte ein Diktat aus zwei Spalten erstellen: eine als Schlüssel des Diktats und die andere als Werte des Diktats. Wie kann ich das machen?

Datenrahmen:

           area  count
co tp
DE Lake      10      7
Forest       20      5
FR Lake      30      2
Forest       40      3

Ich muss den Bereich als Schlüssel definieren und als Wert im Diktat zählen. Danke im Voraus.

Perigäum
quelle

Antworten:

211

Wenn lakeses Ihnen gehört DataFrame, können Sie so etwas tun

area_dict = dict(zip(lakes.area, lakes.count))
Punchagan
quelle
1
In Version 0.17.1 erhalten Fehler:TypeError: zip argument #2 must support iteration
Jezrael
19
Lösung:area_dict = dict(zip(lakes['area'], lakes['count']))
Jezrael
1
Andere Antworten auf diese Frage stackoverflow.com/questions/18695605/…
Ben Fulton
1
Was ist, wenn mehr als eine Spalte in den Wörterbuchwerten enthalten sein soll? Ich denke so etwas wie area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column))). Wie würden Sie das erreichen?
Jesse Marks
2
Wenn das zweite Argument mehrere Werte hat, funktioniert dies nicht.
PNV
8

Mit Pandas kann es gemacht werden als:

Wenn Seen Ihr DataFrame ist:

area_dict = lakes.to_dict('records')
user2643517
quelle
1
In dem angegebenen Beispiel gibt es keine Spalte "Datensätze". Auch in diesem Fall wird der Index der Schlüssel sein, was nicht das ist, was wir wollen.
Michael D
11
@MichaelD 'records' ist keine Spalte. Es ist eine Option für das Argument orient.
Zheng Liu
2

Sie können dies auch tun, wenn Sie mit Pandas herumspielen möchten. Ich mag jedoch Punchagans Art.

# replicating your dataframe
lake = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lake.set_index('co tp', inplace=True)

# to get key value using pandas
area_dict = lake.set_index('area').T.to_dict('records')[0]
print(area_dict)

output: {10: 7, 20: 5, 30: 2, 40: 3}
SammyRod
quelle