Eu tenho um dataframe de duas colunas e pretendo convertê-lo em um dicionário python - a primeira coluna será a chave e a segunda será o valor. Agradeço antecipadamente.
Quadro de dados:
id value
0 0 10.2
1 1 5.7
2 2 7.4
python
dictionary
pandas
perigeu
fonte
fonte
Respostas:
Veja a documentação para
to_dict
. Você pode usá-lo assim:E se você tiver apenas uma coluna, para evitar o nome da coluna também é um nível no dicionário (na verdade, neste caso você usa o
Series.to_dict()
):fonte
>>> ptest = p.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value']) >>> ptest.set_index('id')['value'].to_dict()
fonte
Se você deseja uma maneira simples de preservar duplicatas, pode usar
groupby
:fonte
As respostas de joris neste tópico e de punchagan no tópico duplicado são muito elegantes, no entanto, eles não fornecerão resultados corretos se a coluna usada para as chaves contiver algum valor duplicado.
Por exemplo:
Se você duplicou entradas e não quer perdê-las, pode usar este código feio, mas funcional:
fonte
mydict = defaultdict(list)\n for (key, val) in ptest[["id", "value"]].itertuples(index=False):\n mydict[key].append(val)
Solução mais simples:
Exemplo:
Se você tiver vários valores, como val1, val2, val3, etc e você os quiser como listas, use o código a seguir:
fonte
records
significa aqui?records
aqui significa‘records’ : list like [{column -> value}, … , {column -> value}]
Ver pandas.pydata.org/pandas-docs/stable/reference/api/…em algumas versões, o código abaixo pode não funcionar
então torne-o explícito
Observe que usei id_ porque a palavra id é uma palavra reservada
fonte
Você pode usar 'compreensão de ditado'
fonte
Outra solução (um pouco mais curta) para não perder entradas duplicadas:
fonte
Você precisa de uma lista como valor de dicionário. Este código fará o truque.
fonte
Eu encontrei essa pergunta enquanto tentava fazer um dicionário de três colunas de um dataframe do pandas. No meu caso, o dataframe tem colunas A, B e C (digamos que A e B são as coordenadas geográficas de longitude e latitude e C a região do país / estado / etc, que é mais ou menos o caso).
Eu queria um dicionário com cada par de valores A, B (chave de dicionário) correspondendo ao valor de C (valor de dicionário) na linha correspondente (cada par de valores A, B é garantido como único devido à filtragem anterior, mas é possível ter o mesmo valor de C para diferentes pares de valores de A, B neste contexto), então eu fiz:
Usar pandas to_dict () também funciona:
(nenhuma das colunas A ou B foi usada como índice antes de executar a linha de criação do dicionário)
Ambas as abordagens são rápidas (menos de um segundo em um dataframe com 85k linhas, laptop dual-core rápido de 5 anos de idade).
Os motivos pelos quais estou postando isso:
fonte
este é o meu sloution, um loop básico
fonte
Esta é a minha solução:
fonte