para ndarray multiplicacion matrices mac last data python numpy

python - ndarray - numpy para mac



Convertir un diccionario 2d en una matriz numpy (3)

Tengo un enorme diccionario como este:

d[id1][id2] = value

ejemplo:

books["auth1"]["humor"] = 20 books["auth1"]["action"] = 30 books["auth2"]["comedy"] = 20

y así..

Cada una de las teclas "auth" puede tener cualquier conjunto de "géneros" asociados con ellos. El valor para un artículo con clave es la cantidad de libros que escribieron.

Ahora lo que quiero es convertirlo en una forma de matriz ... algo como:

"humor" "action" "comedy" "auth1" 20 30 0 "auth2" 0 0 20

¿Cómo hago esto? Gracias


En 2018, creo que Pandas 0.22 admite esto fuera de la caja . Específicamente, verifique el método de clase DataFrame de DataFrame .

books = {} books["auth1"] = {} books["auth2"] = {} books["auth1"]["humor"] = 20 books["auth1"]["action"] = 30 books["auth2"]["comedy"] = 20 pd.DataFrame.from_dict(books, orient=''columns'', dtype=None)


Use una lista de comprensión para convertir un dictado en una lista de listas y / o una matriz numpy:

np.array([[books[author][genre] for genre in sorted(books[author])] for author in sorted(books)])

EDITAR

Aparentemente tienes un número irregular de claves en cada sub-diccionario. Haga una lista de todos los géneros:

genres = [''humor'', ''action'', ''comedy'']

Y luego iterar sobre los diccionarios de la manera normal:

list_of_lists = [] for author_name, author in sorted(books.items()): titles = [] for genre in genres: try: titles.append(author[genre]) except KeyError: titles.append(0) list_of_lists.append(titles) books_array = numpy.array(list_of_lists)

Básicamente, estoy intentando agregar un valor de cada clave en los genres a una lista. Si la clave no está allí, arroja un error. Atrapo el error, y en su lugar agrego un 0 a la lista


pandas hacen esto muy bien

books = {} books["auth1"] = {} books["auth2"] = {} books["auth1"]["humor"] = 20 books["auth1"]["action"] = 30 books["auth2"]["comedy"] = 20 from pandas import * df = DataFrame(books).T.fillna(0)

La salida es:

action comedy humor auth1 30 0 20 auth2 0 20 0