Tengo un marco de datos de dos columnas y tengo la intención de convertirlo en un diccionario de Python: la primera columna será la clave y la segunda será el valor. Gracias de antemano.
Marco de datos:
id value
0 0 10.2
1 1 5.7
2 2 7.4
python
dictionary
pandas
perigeo
fuente
fuente
Respuestas:
Consulte los documentos para
to_dict
. Puedes usarlo así:Y si solo tiene una columna, para evitar que el nombre de la columna también sea un nivel en el dict (en realidad, en este caso usa
Series.to_dict()
):fuente
>>> ptest = p.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value']) >>> ptest.set_index('id')['value'].to_dict()
fuente
Si desea una forma sencilla de conservar los duplicados, puede utilizar
groupby
:fuente
Las respuestas de joris en este hilo y de punchagan en el hilo duplicado son muy elegantes, sin embargo no darán resultados correctos si la columna usada para las claves contiene algún valor duplicado.
Por ejemplo:
Si tiene entradas duplicadas y no quiere perderlas, puede usar este código feo pero funcional:
fuente
mydict = defaultdict(list)\n for (key, val) in ptest[["id", "value"]].itertuples(index=False):\n mydict[key].append(val)
Solución más sencilla:
Ejemplo:
Si tiene varios valores, como val1, val2, val3, etc. y los quiere como listas, utilice el siguiente código:
fuente
records
significa aquirecords
aquí significa‘records’ : list like [{column -> value}, … , {column -> value}]
Ver pandas.pydata.org/pandas-docs/stable/reference/api/…en algunas versiones, es posible que el código siguiente no funcione
así que hazlo explícito
Tenga en cuenta que usé id_ porque la palabra id es palabra reservada
fuente
Puede usar 'dict comprehension'
fuente
Otra solución (un poco más corta) para no perder entradas duplicadas:
fuente
Necesita una lista como valor de diccionario. Este código hará el truco.
fuente
Encontré esta pregunta mientras intentaba hacer un diccionario con tres columnas de un marco de datos de pandas. En mi caso, el marco de datos tiene columnas A, B y C (digamos que A y B son las coordenadas geográficas de longitud y latitud y C la región del país / estado / etc., que es más o menos el caso).
Quería un diccionario con cada par de valores A, B (clave del diccionario) que coincida con el valor de C (valor del diccionario) en la fila correspondiente ( se garantiza que cada par de valores A, B es único debido al filtrado anterior, pero es posible tener el mismo valor de C para diferentes pares de valores A, B en este contexto), así que lo hice:
Usar pandas to_dict () también funciona:
(ninguna de las columnas A o B se utilizó como índice antes de ejecutar la línea de creación del diccionario)
Ambos enfoques son rápidos (menos de un segundo en un marco de datos con 85.000 filas, una computadora portátil rápida de doble núcleo de 5 años de antigüedad).
Las razones por las que publico esto:
fuente
este es mi sloution, un bucle básico
fuente
Esta es mi solucion:
fuente