Convertir un DataFrame de Pandas en un diccionario
Tengo un DataFrame con cuatro columnas. Quiero convertir este DataFrame en un diccionario de Python. Quiero que los elementos de la primera columna sean keys
y los elementos de otras columnas en la misma fila sean values
.
Marco de datos:
ID A B C
0 p 1 3 2
1 q 4 3 2
2 r 4 0 9
La salida debería ser así:
{'p': [1,3,2], 'q': [4,3,2], 'r': [4,0,9]}
El to_dict()
método establece los nombres de las columnas como claves de diccionario, por lo que deberá remodelar ligeramente su DataFrame. Establecer la columna 'ID' como índice y luego transponer el DataFrame es una forma de lograrlo.
to_dict()
también acepta un argumento de 'orientación' que necesitará para generar una lista de valores para cada columna. {index: value}
De lo contrario, se devolverá un diccionario del formulario para cada columna.
Estos pasos se pueden realizar con la siguiente línea:
>>> df.set_index('ID').T.to_dict('list')
{'p': [1, 3, 2], 'q': [4, 3, 2], 'r': [4, 0, 9]}
En caso de que se necesite un formato de diccionario diferente, aquí hay ejemplos de los posibles argumentos de orientación. Considere el siguiente marco de datos simple:
>>> df = pd.DataFrame({'a': ['red', 'yellow', 'blue'], 'b': [0.5, 0.25, 0.125]})
>>> df
a b
0 red 0.500
1 yellow 0.250
2 blue 0.125
Entonces las opciones son las siguientes.
dict : valor predeterminado: los nombres de las columnas son claves, los valores son diccionarios de índice: pares de datos
>>> df.to_dict('dict')
{'a': {0: 'red', 1: 'yellow', 2: 'blue'},
'b': {0: 0.5, 1: 0.25, 2: 0.125}}
lista : las claves son nombres de columnas, los valores son listas de datos de columnas
>>> df.to_dict('list')
{'a': ['red', 'yellow', 'blue'],
'b': [0.5, 0.25, 0.125]}
serie : como 'lista', pero los valores son series
>>> df.to_dict('series')
{'a': 0 red
1 yellow
2 blue
Name: a, dtype: object,
'b': 0 0.500
1 0.250
2 0.125
Name: b, dtype: float64}
dividir : divide columnas/datos/índice como claves con valores que son nombres de columnas, valores de datos por fila y etiquetas de índice respectivamente
>>> df.to_dict('split')
{'columns': ['a', 'b'],
'data': [['red', 0.5], ['yellow', 0.25], ['blue', 0.125]],
'index': [0, 1, 2]}
registros : cada fila se convierte en un diccionario donde la clave es el nombre de la columna y el valor son los datos de la celda
>>> df.to_dict('records')
[{'a': 'red', 'b': 0.5},
{'a': 'yellow', 'b': 0.25},
{'a': 'blue', 'b': 0.125}]
índice : como 'registros', pero un diccionario de diccionarios con claves como etiquetas de índice (en lugar de una lista)
>>> df.to_dict('index')
{0: {'a': 'red', 'b': 0.5},
1: {'a': 'yellow', 'b': 0.25},
2: {'a': 'blue', 'b': 0.125}}
¿Debería un diccionario como:
{'red': '0.500', 'yellow': '0.250', 'blue': '0.125'}
ser requerido fuera de un marco de datos como:
a b
0 red 0.500
1 yellow 0.250
2 blue 0.125
La forma más sencilla sería hacer:
dict(df.values)
fragmento de trabajo a continuación:
import pandas as pd
df = pd.DataFrame({'a': ['red', 'yellow', 'blue'], 'b': [0.5, 0.25, 0.125]})
dict(df.values)
Sigue estos pasos:
Supongamos que su marco de datos es el siguiente:
>>> df
A B C ID
0 1 3 2 p
1 4 3 2 q
2 4 0 9 r
1. Úselo set_index
para establecer ID
columnas como índice del marco de datos.
df.set_index("ID", drop=True, inplace=True)
2. Utilice el orient=index
parámetro para tener el índice como claves de diccionario.
dictionary = df.to_dict(orient="index")
Los resultados serán los siguientes:
>>> dictionary
{'q': {'A': 4, 'B': 3, 'D': 2}, 'p': {'A': 1, 'B': 3, 'D': 2}, 'r': {'A': 4, 'B': 0, 'D': 9}}
3. Si necesita tener cada muestra como una lista, ejecute el siguiente código. Determinar el orden de las columnas.
column_order= ["A", "B", "C"] # Determine your preferred order of columns
d = {} # Initialize the new dictionary as an empty dictionary
for k in dictionary:
d[k] = [dictionary[k][column_name] for column_name in column_order]