Las columnas de dataframe de python pandas se convierten en dict clave y valor

92

Tengo un marco de datos de pandas con varias columnas y me gustaría construir un dict a partir de dos columnas: una como claves del dict y la otra como valores del dict. ¿Cómo puedo hacer eso?

Marco de datos:

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

Necesito definir el área como clave, contar como valor en dict. Gracias de antemano.

perigeo
fuente

Respuestas:

213

Si lakeses tuyo DataFrame, puedes hacer algo como

area_dict = dict(zip(lakes.area, lakes.count))
punchagan
fuente
1
En la versión 0.17.1 get error:TypeError: zip argument #2 must support iteration
jezrael
19
Solución:area_dict = dict(zip(lakes['area'], lakes['count']))
Jezrael,
1
Otras respuestas a esta pregunta stackoverflow.com/questions/18695605/…
Ben Fulton
1
¿Qué pasa si desea que más de una columna esté en los valores del diccionario? Estoy pensando en algo como area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column))). ¿Cómo harías que esto sucediera?
Jesse Marks
2
Si el segundo argumento tiene varios valores, esto no funcionará.
pnv
9

Con pandas se puede hacer como:

Si lagos es su DataFrame:

area_dict = lakes.to_dict('records')
usuario2643517
fuente
1
no hay una columna de "registros" en el ejemplo dado. También en tal caso el índice será la clave, que no es lo que queremos.
Michael D
11
@MichaelD 'records' no es una columna. Es una opción para el argumento orient.
Zheng Liu
2

También puedes hacer esto si quieres jugar con los pandas. Sin embargo, me gusta el estilo de punchagan.

# 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
fuente