colunas de dataframe python pandas convertidas em chave e valor dict

98

Eu tenho um quadro de dados do pandas com várias colunas e gostaria de construir um dict a partir de duas colunas: uma como as chaves do dict e a outra como os valores do dict. Como eu posso fazer isso?

Quadro de dados:

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

Preciso definir a área como chave, contar como valor em dict. Agradeço antecipadamente.

perigeu
fonte

Respostas:

229

Se lakesfor seu DataFrame, você pode fazer algo como

area_dict = dict(zip(lakes.area, lakes.count))
punchagan
fonte
1
Na versão 0.17.1 obter o erro:TypeError: zip argument #2 must support iteration
jezrael
23
Solução:area_dict = dict(zip(lakes['area'], lakes['count']))
jezrael
1
Outras respostas a esta pergunta stackoverflow.com/questions/18695605/…
Ben Fulton
1
E se você quisesse que mais de uma coluna fossem os valores do dicionário? Estou pensando em algo assim area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column))). Como você faria isso acontecer?
Jesse Marks
2
Se o segundo argumento tiver vários valores, isso não funcionará.
pnv
10

Com os pandas, pode ser feito como:

Se lakes for seu DataFrame:

area_dict = lakes.to_dict('records')
user2643517
fonte
1
não há coluna 'registros' no exemplo dado. Também nesse caso, o índice será a chave, e não o que queremos.
Michael D
11
@MichaelD 'registros' não é uma coluna. É uma opção para o argumento orient.
Zheng Liu
Na verdade, isso gerará uma lista de dicionários no seguinte formato: [{'área': 10, 'contagem': 7}, {'área': 20, 'contagem': 5} ...] em vez de uma tecla- > valor dict.
Roei Bahumi
2

Você também pode fazer isso se quiser brincar com os pandas. No entanto, gosto do jeito do 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
fonte